【发布时间】: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