我创建了一个角度应用程序,我使用jwt来验证对服务器的每个api调用。在客户端,我在用户登录后在localStorage中将loggedIn设置为true。然后我在ui路由器stateChangeStart事件上使用AuthService来检查localStorage中的loggedIn是否为真。
我见过许多例子,他们在localStorage中保存用户名,然后检查是否设置了用户名,以确定用户是否经过身份验证。但我的问题是,localStorage可以调和,任何人都可以设置用户名属性或将loggedIn设置为true。
你对此有什么想法,并且有些东西我不知道。
答案 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
通过适当的错误处理,它对我很有用。虽然它可以调和,但它不能被滥用。如果这有帮助,请告诉我:)