如何解决用户登录,但令牌没有更改,在使用angular中的JWT Auth刷新之前
我在jwt中用jwt创建身份验证
在我的服务api中
login(body: any) {
return this._http.post(this.apiURL + 'login',body,{
observe: 'body',}
}
login() {
this.loading = true;
setTimeout(() => {
this.auth.login(this.loginForm.value)
.subscribe(
data => {
localStorage.setItem('userData',JSON.stringify(data));
console.log(data);
this.successMessage = data;
this.userService.getUserName().subscribe(
(data: any) => {
this.userChange.next(data.data);
localStorage.setItem('displayName',data.data.displayName);
if (data.data.emailVerified != true) {
this.router.navigateByUrl('/auth/email-verification');
}
if (data.data.kewirusType == 'user') {
this.router.navigateByUrl('/pages/projects/all-project')
} else if (data.data.kewirusType == 'admin') {
localStorage.setItem('kewirusType',data.data.kewirusType);
console.log(localStorage.getItem('kewirusType'));
this.router.navigateByUrl('/pages/admin/users-list');
}
},)
},error => {
this.loading = false
console.log(error.error.message[0]);
this.errorMessage = error.error.message[0];
}
)});
}
因此,当我第一次登录时,假设我使用管理员帐户,然后注销,然后我使用用户帐户登录,这给了管理员帐户而不是用户帐户。和令牌
这是注销前的管理员令牌
在我刷新页面后,令牌在更改
我已经和我的后端进行了交谈,但是他说这是从我前端的代码而不是他的,但是我找不到问题所在,有人知道为什么会这样吗?
编辑
这是我的api要求提供用户详细信息
getUserName() {
return this._http.get<User[]>(this.apiURL + 'auth/user')
}
几个小时后寻找问题,我认为这与更改标头授权令牌有关,因为在用户使用其他帐户注销后它没有更改。注销时有什么方法可以刷新标题吗?
解决方法
在localStorage.clear();
函数上使用logout()
。
所以我想通了,这是因为auth-interceptor
是我的代码
getToken() {
return this.userData.data.token;
}
intercept(req: HttpRequest<any>,next: HttpHandler): Observable<HttpEvent<any>> {
if (this.getToken() != null) {
const clonedReq = req.clone({
headers: req.headers.set('Authorization','Bearer ' + this.getToken())
});
return next.handle(clonedReq).pipe(
tap(
succ => {
},err => {
if (err.status == 401) {
this.getToken();
this.router.navigateByUrl('/auth/login');
} else if (err.status == 403) {
this.router.navigateByUrl('/forbidden');
}
}
)
)
}
else {
return next.handle(req.clone());
}
}
intercept(request: HttpRequest<any>,next: HttpHandler): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
let currentUser = JSON.parse(localStorage.getItem('userData'));
if (currentUser && currentUser.data.token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${currentUser.data.token}`
}
});
}
return next.handle(request);
}
然后它起作用了,如果有人可以解释这会有所帮助
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。