【问题标题】:'Failed to execute atob on window' unsure if it's writing the payload or the function to decode it'无法在窗口上执行 atob' 不确定它是否正在编写有效负载或解码它的函数
【发布时间】:2017-06-11 07:57:55
【问题描述】:

我一直在学习本教程https://thinkster.io/tutorials/mean-stack/creating-an-angular-service-for-authentication。我收到错误“无法在窗口上执行 atob”。我相当有信心错误在身份验证工厂内,特别是 auth.isLoggedIn 函数,我有 console.log 来自服务器的响应并将令牌复制并粘贴到 jwt.io 并验证它是假设的。所以,解码功能有问题。我曾尝试研究$window.atob 以理解这一点并正确调试,但我不明白。我的 userSchema 中的 jwt.sign 没有使用任何名为 .btoa 的函数,所以即使教程说使用 .atob 来解码这似乎也不正确。如何在我的角度工厂中解码令牌以保存在此有效负载变量中?

var payload = JSON.parse($window.atob(token.split('.')[1]));

Angular 应用文件

app.factory('auth', ['$http', '$window', function($http, $window){
    var auth = {};

auth.saveToken = function(token){
    $window.localStorage['rawle_news_app'] = token;
};

auth.getToken = function(){
    return $window.localStorage['rawle_news_app'];
}

auth.isLoggedIn = function(){
    var token = auth.getToken();

    if(token){
        var payload = JSON.parse($window.atob(token.split('.')[1]));

        return payload.exp > Date.now() / 1000;
    }else{
        return false;
    }
};

auth.currentUser = function(){
    if(auth.isLoggedIn()){
        var token = auth.getToken();
        var payload = JSON.parse($window.atob(token.split('.')[1]));

        return payload.username;
    }
};

auth.register = function(user){
    return $http.post('/register', user).then(function(data){
        auth.saveToken(data.token);
    });
};

auth.logIn = function(user){
    return $http.post('/login', user).then(function(data){
        auth.saveToken(data.token);
    });
};

auth.logOut = function(){
    $window.localStorage.removeItem('rawle_news_app');
};

  return auth;
}])

【问题讨论】:

    标签: angularjs authentication passport-local json-web-token


    【解决方案1】:

    我将发布解决方案以防其他人遇到此问题,但事实证明该解码语句没有任何问题,但实际上是将令牌保存到 $window.localStorage 中。您可以在上面看到我使用的是数据而不是响应,这让我相信 data.token 是令牌的正确路径,但如果您控制台日志,您会看到数据也是一个字段名称。所以我不得不使用data.data.token。因此,虽然我觉得自己很愚蠢,但我将把它放在这里,以防其他人在本教程中遇到问题,以确保他们有类似的东西作为他们的注册函数。

        auth.register = function(user){
          return $http.post('/register', user).then(function(response){
              auth.saveToken(response.data.token);
          });
        };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2021-03-25
      • 2022-01-14
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多