Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ReferenceError:未定义令牌_Javascript_Angularjs_Ionic Framework - Fatal编程技术网

Javascript ReferenceError:未定义令牌

Javascript ReferenceError:未定义令牌,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我一直在遵循离子认证的登录教程。但当我尝试运行程序并登录时,错误是: ReferenceError:未定义令牌 at storeUserCredentials(services.js:16) 在services.js:46 在Object.login(services.js:44) 有人能帮我吗?这是我的服务: app.service('AuthService', function($q, $http, USER_ROLES){ var LOCAL_TOKEN_KEY = 'yourTo

我一直在遵循离子认证的登录教程。但当我尝试运行程序并登录时,错误是:

ReferenceError:未定义令牌 at storeUserCredentials(services.js:16) 在services.js:46 在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');
});

您已经在函数
loadUserCredentials
中创建了
token
,因此它对
其他函数不可用。您需要将其设置为全局

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

您的
token
变量是
loadUserCredentials
函数作用域的本地变量。你需要让它全球化