2015-08-29 3 views
1

Я слежу за учебником по названию средней машины. Это было очень полезно. Я настраиваю аутентификацию и не могу понять эту ошибку, которую я получаю.Токен не определен - MEAN Stack

Любая помощь была бы принята с благодарностью! Кажется, я не могу найти ответ нигде.

ОШИБКА: маркер не определен на Object.authTokenFactory.setToken (authService.js: 69)

authService.js:

angular.module('authService', []) 
 

 
// =================================================== 
 
// auth factory to login and get information 
 
// inject $http for communicating with the API 
 
// inject $q to return promise objects 
 
// inject AuthToken to manage tokens 
 
// =================================================== 
 

 
.factory('Auth', function($http, $q, AuthToken) { 
 
\t // create auth factory obj 
 
\t var authFactory = {}; 
 
\t // login user 
 
\t authFactory.login = function(username, password) { 
 
\t \t // return promise obj and its data 
 
\t \t return $http.post('/api/authenticate', { 
 
\t \t \t username: username, 
 
\t \t \t password: password 
 
\t \t }) 
 
\t \t .success(function(data) { 
 
\t \t \t AuthToken.setToken(data.token); 
 
\t \t \t return data; 
 
\t \t }); 
 
\t }; 
 
\t 
 
\t // logout user by clearing token 
 
\t authFactory.logout = function() { 
 
\t \t AuthToken.setToken(); 
 
\t }; 
 
\t 
 
\t // check if user is logged in 
 
\t // checks for local token 
 
\t authFactory.isLoggedIn = function() { 
 
\t \t if (AuthToken.getToken()) 
 
\t \t \t return true; 
 
\t \t else 
 
\t \t \t return false; 
 
\t }; 
 
\t 
 
\t // get logged in user 
 
\t authFactory.getUser = function() { 
 
\t \t if (AuthToken.getToken()) 
 
\t \t \t return $http.get('/api/me', { cache : true}); 
 
\t \t else 
 
\t \t \t return $q.reject({ message : 'User has no token.'}); 
 
\t }; 
 
\t 
 
\t 
 
\t 
 
\t return authFactory; 
 
}) 
 
// =================================================== 
 
// factory for handling tokens 
 
// inject $window to store token client-side 
 
// 
 
// 
 
// =================================================== 
 
.factory('AuthToken', function($window) { 
 
\t var authTokenFactory = {}; 
 
\t 
 
\t // get token out of local storage 
 
\t authTokenFactory.getToken = function() { 
 
\t \t return $window.localStorage.getItem('token'); 
 
\t }; 
 
\t // function to set token or clear token 
 
\t // if a token is passed, set the token 
 
\t // if there is no token, clear it from local storage 
 
\t authTokenFactory.setToken = function() { 
 
\t \t if (token) 
 
\t \t \t $window.localStorage.setItem('token', token); 
 
\t \t else 
 
\t \t \t $window.localStorage.removeItem('token'); 
 
\t }; 
 
\t 
 
\t return authTokenFactory; 
 
}) 
 
// =================================================== 
 
// application configuration to integrate token into requests 
 
// =================================================== 
 
.factory('AuthInterceptor', function($q, $location, AuthToken) { 
 
\t var interceptorFactory = {}; 
 
\t 
 
\t // this will happen on all http requests 
 
\t interceptorFactory.request = function(config) { 
 
\t \t // grab token 
 
\t \t var token = AuthToken.getToken; 
 
\t \t // if token exists add it to the header as x-access-token 
 
\t \t if (token) 
 
\t \t \t config.headers['x-access-token'] = token; 
 
\t \t \t 
 
\t \t \t return config; 
 
\t }; 
 
\t 
 
\t // happens on response errors 
 
\t interceptorFactory.responseError = function(response) { 
 
\t \t // if 403 from server 
 
\t \t if (response.status == 403) { 
 
\t \t \t AuthToken.setToken(); 
 
\t \t \t $location.path('/login') 
 
\t \t } 
 
\t \t //return the errors from server as promise 
 
\t \t return $q.reject(response); 
 
\t }; 
 
\t 
 
\t return interceptorFactory; 
 
});

mainCtrl.js

angular.module('mainCtrl', []) 
 
.controller('MainController', function($rootScope, $location, Auth) { 
 
\t var vm = this; 
 
\t 
 
\t // get info if a person is logged in 
 
\t vm.loggedIn = Auth.isLoggedIn(); 
 
\t 
 
\t // check to see if user is logged in on every req 
 
\t $rootScope.$on('$routeChangeStart', function() { 
 
\t \t vm.loggedIn = Auth.isLoggedIn(); 
 
\t \t 
 
\t \t // get user info on route change 
 
\t \t // Auth.getUser() 
 
\t \t // .success(function(data) { 
 
\t \t // \t vm.u = data; 
 
\t \t // }); 
 
\t \t Auth.getUser().then(function (data) { 
 
     \t \t vm.user = data; 
 
\t \t }, 
 
\t \t function (response) { 
 
\t \t \t // Handle case where user is not logged in 
 
\t \t \t // or http request fails 
 
\t \t }); 
 
\t }); 
 
\t 
 
\t // handle login form 
 
\t vm.doLogin = function() { 
 
\t \t vm.processing = true; 
 
\t \t // clear error 
 
\t \t vm.error = ''; 
 
\t \t 
 
\t \t // call Auth.login() func 
 
\t \t Auth.login(vm.loginData.username, vm.loginData.password) 
 
\t \t \t .success(function(data) { 
 
\t \t \t \t vm.processing = false; 
 
\t \t \t \t //if a user logs in, redirect to users pg 
 
\t \t \t \t if (data.success) 
 
\t \t \t \t \t $location.path('/users'); 
 
\t \t \t \t else 
 
\t \t \t \t \t vm.error = data.message; 
 
\t \t \t \t 
 
\t \t \t \t 
 
\t \t \t }); 
 
\t }; 
 
\t 
 
\t // log out 
 
\t vm.doLogOut = function() { 
 
\t \t Auth.logout(); 
 
\t \t vm.u = {}; 
 
\t \t $location.path('/login'); 
 
\t }; 
 
});

ответ

0

Сообщение об ошибке, которое вы получили, действительно говорит все. Переменная token никогда не определяется в authTokenFactory.setToken().

authTokenFactory.setToken = function(token) { // Add this variable delcaration 
    if (token) 
     $window.localStorage.setItem('token', token); 
    else 
     $window.localStorage.removeItem('token'); 
    }; 
} 
+0

Это происходит после того, как я отправлю свою регистрационную форму. Я не уверен, почему он не будет установлен:/ –

+0

Я не уверен, что вы подразумеваете под // Добавить эту переменную delcaration –

+0

В вашем коде setToken не принимает никаких параметров. Вам нужно добавить токен в качестве параметра функции. –