页面刷新时,Satellizer 登录 JWT 令牌消失了
Posted
技术标签:
【中文标题】页面刷新时,Satellizer 登录 JWT 令牌消失了【英文标题】:Satellizer login JWT token is gone when page refresh 【发布时间】:2017-11-04 08:36:52 【问题描述】:我正在使用 Angular-satellizer
扩展名来登录/注册功能,但我被困在第 7 位。
令牌已保存到localStorage
,但我刷新页面时它消失了,$auth.isAuthenticated()
函数返回 false。
.controller('loginCtrl', function($scope, $state, $auth, jwtHelper)
$scope.login = function()
$auth.login($scope.user)
.then(function(response)
var gelenToken = response.data;
var tokenPayload = jwtHelper.decodeToken(gelenToken.token);
console.log(JSON.stringify(tokenPayload)); // Output:"sub":"1","iat":1496346513,"exp":1497556113,"data":"role":"admin"
localStorage.setItem('token', JSON.stringify(tokenPayload));
$state.go('baba.manga');
)
;
)
【问题讨论】:
【参考方案1】:也许当您刷新页面时,您正在重置 localStorage 并且您的最后一个令牌消失了。
试试这个
// if the localScore is not set then initialize it
if(localStorage.getItem('token') === null)
localStorage.setItem('token', JSON.stringify(tokenPayload));
【讨论】:
【参考方案2】:你应该试试这个:
localStorage.setItem('token', data.token);
或
$window.localStorage.token = JSON.stringify(data.token);
要保存您的令牌,您可以在浏览器本地存储中看到该令牌,除非您需要,否则您无需解码该令牌。
它不应该在页面刷新时被删除,如果它被删除,我建议你在地方尝试断点并调试哪个部分正在清除本地存储。
浏览器在任何时候都不会删除任何本地存储数据,您的代码可能正在这样做。
【讨论】:
卫星发射器曼努埃尔说Parse the token and save it to localStorage
。解析意味着解码对吗?
我不这么认为,解析意味着提取并保存,而不是解码,您必须将编码的令牌发送到未解码的服务器。
好的。我发现问题。令牌只为login.html
保存,而不是为所有页面保存。现在我需要与index.html
或$scope.isAuthenticated = function()
共享令牌与index.html
的状态共享此功能。哪个更好?
Satellizer 有自己的函数$auth.setToken(token)
,这会保存所有页面的令牌。谢谢。以上是关于页面刷新时,Satellizer 登录 JWT 令牌消失了的主要内容,如果未能解决你的问题,请参考以下文章
如何在刷新页面上存储在本地存储中的 reactjs 中使用 JWT 进行身份验证?