页面刷新时,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 令牌消失了的主要内容,如果未能解决你的问题,请参考以下文章

JWT 令牌失效的未知原因

如何在刷新页面上存储在本地存储中的 reactjs 中使用 JWT 进行身份验证?

如果刷新(JWT)令牌未经授权(401响应),AngularJS重定向到登录

JWT 从 node.js 更新有效负载

在客户端应用程序上刷新 JWT 和保护会话

jwt令牌的刷新如何在django REST angular中工作