2016-03-27 27 views
1

Her istekte bulunan bir kullanıcıyı tanımlamaya çalışıyorum.AngularJs, her istekte bulunan kullanıcıyı kontrol et

(function() 
{ 
    angular.module('employeeApp').factory('authenticationFactory', authenticationFactory); 

    function authenticationFactory($cookieStore,$cookies,requestFactory,$location,GLOBALS,constants) 
    { 
     var factory = {}; 



     factory.validateUser = function() 
     { 
      var vm = this; 

      if($location.path() != '/') 
      { 
       var api_token = factory.getToken(); 

       factory.isValidToken(api_token).then(function(response) { 
        if (response.status != 200) { 
         $location.path('/'); 
        } 
        data = {"api_token": api_token}; 
        requestFactory.post(GLOBALS.url + 'show/employee/' + $cookies.get('employeeid'), data) 
       }); 
      } 
     } 

     return factory; 
    } 
})() 

Ama şu anda benim konsolda hata alırsınız:

routes.js:38 Uncaught TypeError: Cannot read property 'then' of undefined

(function() { 

angular.module('employeeApp').config(routeModule).run(run); 

routeModule.$inject = ['$routeProvider']; 

function routeModule($routeProvider) 
{ 
    $routeProvider.when('/', { 
     templateUrl: '../views/login.html', 
     controller: 'authenticationController', 
     controllerAs: 'authenticationCtrl' 
    }) 
    .when('/home', { 
     templateUrl: '../views/index.html', 
     controller: 'homeController', 
     controllerAs: 'homeCtrl', 
     resolve: { 
      message: function(authenticationFactory){ 
       return authenticationFactory.validateUser(); 
      } 
     } 
    }) 
    .when('/werknemer/:id', { 
     templateUrl: '../views/employee/employee.html', 
     controller: 'employeeController', 
     controllerAs: 'employeeCtrl' 
    }) 
    .otherwise({ 
     redirectTo: '/' 
    }); 
} 


function run(authenticationFactory) 
{ 
    authenticationFactory.validateUser() 
    .then(function (response) { 
     console.log('validateuser'); 
     constants.firstname = response.data.result.Employee.FirstName; 
     constants.companyid = response.data.result.Employee.CompanyId; 
     constants.employeeid = response.data.result.Employee.EmployeeId; 

    }, function() { 
     $location.path('/'); 
}); 
} 

})(); 

function run şöyle authenticationFactory kullanır: Şu anda bu benim routes dosyasıdır

Neyi yanlış yapıyorum? fıkra başarısız olursa çözülmesine mekanizması her zaman bir söz iade edilmesini beklediği takdirde

--EDIT--

factory.validateUser = function() 
     { 
      var vm = this; 

      if($location.path() != '/') 
      { 
       var api_token = factory.getToken(); 

       factory.isValidToken(api_token).then(function(response) { 
        if (response.status != 200) { 
         $location.path('/'); 
        } 
        data = {"api_token": api_token}; 
        return requestFactory.post(GLOBALS.url + 'show/employee/' + $cookies.get('employeeid'), data) 
       }); 
      } 
     } 
+0

'factory.validateUser' istek isteğini döndürmez –

+0

Bunu yapsam bile aynı hatayı alıyorum! Düzenlememe bak. – Jamie

+0

Lütfen [$ q] (https://docs.angularjs.org/api/ng/service/$q) ile ilgili belgelere bakın. Sorunu çözdüğünüz bir probise ('factory.validateUser') döndürmek için buna ihtiyacınız var. doğrulama işleminden sonra el ile reddet –

cevap

0

Kişisel validateUser fonksiyonlar geriye döndürür. eğer fıkra sonra bu otomatik-çözme sözünü ekleyerek

deneyin, başka bir olarak hizmet vermeye:

var q = $q.defer(); q.resolve(); return q.promise; 

hizmete $ q (angularjs vaadi uygulaması) enjekte etmeyi unutmayın.

İlgili konular