最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - ReferenceError: token is not defined - Stack Overflow

programmeradmin8浏览0评论

i've been following login tutorial with authentication in ionic. but when i try run the program and login, the error is :

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

anyone can help me please? this is my service :

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.headermon['X-Auth-Token'] = token;
    }

    function destroyUserCredentials(){
        authToken = undefined;
        username = '';
        isAuthenticated = false;
        $http.defaults.headermon['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');
});

i've been following login tutorial with authentication in ionic. but when i try run the program and login, the error is :

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

anyone can help me please? this is my service :

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.mon['X-Auth-Token'] = token;
    }

    function destroyUserCredentials(){
        authToken = undefined;
        username = '';
        isAuthenticated = false;
        $http.defaults.header.mon['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');
});
Share Improve this question asked Nov 30, 2016 at 7:25 Faizah PratiwiFaizah Pratiwi 831 gold badge2 silver badges12 bronze badges 1
  • Your token variable is local to loadUserCredentials functions scope. You need to make it global – abhishekkannojia Commented Nov 30, 2016 at 7:38
Add a ment  | 

1 Answer 1

Reset to default 4

You have created token inside the function loadUserCredentials so it is not available to other functions.You need to make it global.

var token ="";
function loadUserCredentials() {
  token = window.localStorage.getItem(LOCAL_TOKEN_KEY);
  if (token) {
     useCredentials(token);
   }
}
发布评论

评论列表(0)

  1. 暂无评论