【问题标题】:How to prevent jwt token getting lost on page refresh in an angularjs application?如何防止 jwt 令牌在 angularjs 应用程序中的页面刷新时丢失?
【发布时间】:2016-11-13 05:56:02
【问题描述】:

我正在尝试使用 jwt 令牌授权用户。但是,如果我刷新页面,jwt 会丢失,并且不会在后续请求中将令牌发送到服务器。我使用 localstorage 存储令牌和 spring-mvc 用于后端。 这是我创建的服务:

'use strict';
angular.module('authentication')
.factory('AuthenticationService', ['$http', '$localStorage',    
'$rootScope','$route', '$q', function($http, $localStorage, $rootScope, 
$route, $q){
var service = {loggedInUser: function(){
return $q.when($rootScope.user)
}};
service.Login = Login;
service.Logout = Logout;

return service;

function Login(username, password, callback){
    $http.post('http://172.16.0.26:7001/Taisys_Server_Current/auth',
    {username:username, password:password})
    .success(function (response){
        if(response.token){
        $localStorage.currentUser = {username:username,    
        token:response.token};

        $http.defaults.headers.common.Authorization = 'Bearer' + response.token;

        $rootScope.user= $localStorage.currentUser;

        $rootScope.token = response.token;


        callback(true);
      }
      else{
        callback(false);
      }
    });
}
function Logout(){
  delete $localStorage.currentUser;
  $http.defaults.headers.common.Authorization = '';
  $route.reload();
  }
  }]);

【问题讨论】:

  • cookies/网络存储(localStorage/sessionStorage)
  • 本地存储不会在页面刷新时被清除。你是如何在 $http 请求上设置令牌的?

标签: javascript angularjs json angularjs-directive jwt


【解决方案1】:

如果您已经登录,则必须使用它。

$http.defaults.headers.common.Authorization = 'Bearer' + $localStorage.currentUser.token;

【讨论】:

  • 我试过了,但它不起作用。页面刷新后它仍然会丢失。并且不会在页面刷新后随后续请求一起发送。
  • $http.defaults.headers.common.Authorization 将在页面刷新后丢失。您必须在页面重新加载时设置它。我在运行块中使用它。
猜你喜欢
  • 2020-11-19
  • 2019-06-29
  • 2017-11-04
  • 2017-04-25
  • 1970-01-01
  • 2021-06-28
  • 2019-03-24
  • 2015-05-19
  • 2020-09-16
相关资源
最近更新 更多