使用localStorage进行AngularJS身份验证

时间:2016-12-24 07:13:08

标签: angularjs authentication jwt

我创建了一个角度应用程序,我使用jwt来验证对服务器的每个api调用。在客户端,我在用户登录后在localStorage中将loggedIn设置为true。然后我在ui路由器stateChangeStart事件上使用AuthService来检查localStorage中的loggedIn是否为真。

我见过许多例子,他们在localStorage中保存用户名,然后检查是否设置了用户名,以确定用户是否经过身份验证。但我的问题是,localStorage可以调和,任何人都可以设置用户名属性或将loggedIn设置为true。

你对此有什么想法,并且有些东西我不知道。

1 个答案:

答案 0 :(得分:0)

我这样做的方法是,只需将令牌存储在localStorage中,或者更好地保存头部JSON,如下所示

if (response.data.token) // response for successful login
  {
    let headers = {
      ContentType  : 'application/json',
      access-token : response.data.token,
      anyOtherHeader: 'xxx'
    }

    window.localStorage.setItem('headers',JSON.stringify(headers));
  }

只需在应用加载时检查一下,如果它存在,是否确实将其保存在$ rootScope中

let headers = window.localStorage.getItem('headers');
if(headers){
   $rootScope.headers = JSON.parse(headers);
   $timeout(function(){$scope.$apply()}) //to update your app about token
}

每当您的令牌未经过身份验证/未经验证/注销时,只需将其从localStorage和$ rootScope中删除

window.localStorage.removeItem('headers')
$rootScope.headers = undefined;
$timeout(function(){$scope.$apply()}); //again to update your app about it 

通过适当的错误处理,它对我很有用。虽然它可以调和,但它不能被滥用。如果这有帮助,请告诉我:)