2016-11-30 6 views
0

Я слежу за учебным пособием для входа с аутентификацией в ионной форме. но когда я попробую запустить программу и логин, ошибка:ReferenceError: токен не определен

ReferenceError: token is not defined at storeUserCredentials (services.js:16) at services.js:46 at Object.login (services.js:44)

Кто-нибудь может мне помочь? это моя служба:

app.service('AuthService', function($q, $http, USER_ROLES){ 
    var LOCAL_TOKEN_KEY = 'yourTokenKey'; 
    var username = ''; 
    var isAuthenticated = false; 
    var role = ''; 
    var authToken; 

    function loadUserCredentials() { 
     var token = window.localStorage.getItem(LOCAL_TOKEN_KEY); 
     if (token) { 
      useCredentials(token); 
     } 
    } 

    function storeUserCredentials(){ 
     window.localStorage.setItem(LOCAL_TOKEN_KEY, token); 
     useCredentials(token); 
    } 

    function useCredentials(token){ 
     username = token.split('.')[0]; 
     isAuthenticated = true; 
     authToken = token; 

     if (username == 'admin') { 
      role = USER_ROLES.admin 
     } 
     if (username == 'user') { 
      role = USER_ROLES.public 
     } 

     $http.defaults.header.common['X-Auth-Token'] = token; 
    } 

    function destroyUserCredentials(){ 
     authToken = undefined; 
     username = ''; 
     isAuthenticated = false; 
     $http.defaults.header.common['X-Auth-Token'] = undefined; 
     window.localStorage.removeItem(LOCAL_TOKEN_KEY); 
    } 

    var login = function(name, pw){ 
     return $q(function(resolve,reject){ 
      if ((name == 'admin' && pw == '1') || (name =='user' && pw == '1')){ 
       storeUserCredentials(name +'.yourServerToken'); 
       resolve('Login Success'); 
      } else { 
       reject('Login Failed'); 
      } 
     }); 
    }; 

    var logout = function(){ 
     destroyUserCredentials(); 
    }; 

    var isAuthorized = function(authorizedRoles){ 
     if (!angular.isArray(authorizedRoles)){ 
      authorizedRoles = [authorizedRoles]; 
     } 
     return (isAuthenticated && authorizedRoles.indexOf(role)) 
    }; 

    loadUserCredentials(); 

    return { 
     login : login, 
     logout : logout, 
     isAthorized : isAuthorized, 
     isAuthenticated : function() {return isAuthenticated;}, 
     username : function() {return username;}, 
     role : function(){return role;} 
    }; 
}) 

.factory('AuthInterceptor', function ($rootScope, $q, AUTH_EVENTS) { 
    return { 
    responseError: function (response) { 
     $rootScope.$broadcast({ 
     401: AUTH_EVENTS.notAuthenticated, 
     403: AUTH_EVENTS.notAuthorized 
     }[response.status], response); 
     return $q.reject(response); 
    } 
    }; 
}) 

.config(function ($httpProvider) { 
    $httpProvider.interceptors.push('AuthInterceptor'); 
}); 
+0

Ваша переменная 'token' является локальной для области функций loadUserCredentials. Вы должны сделать его глобальным – abhishekkannojia

ответ

0

Вы создали token внутри функции loadUserCredentials поэтому он не доступен для other functions .Вы должны сделать его глобальным.

var token =""; 
function loadUserCredentials() { 
    token = window.localStorage.getItem(LOCAL_TOKEN_KEY); 
    if (token) { 
    useCredentials(token); 
    } 
} 
Смежные вопросы