我正在使用 Angular 7,并且在 Auth 服务登录方法中实现了对同一服务的方法的调用以设置此类方法的变量:
export class AuthService {
private url:string = 'http://localhost:8080/Auth';
private token:string;
private expiresAt: number;
private CurrentUsername : string = null;
private currentUserId : number = null;
public CurrentUserroles : RoleModelDTO[];
constructor(private http: HttpClient, private router: Router, private userService: UserService) { }
login(loginModel : LoginModelDTO){
const headers = new HttpHeaders(
{
'Content-Type': 'application/json'
}
);
this.http.post(`${this.url}/login`,loginModel,{headers}).subscribe(
(resp: LogedUserModelDTO) => {
console.log(resp);
this.setToken(resp.token);
this.setExpiresAt(resp.expire);
this.setCurrentUserName(resp.username);
this.setCurrentUserId(resp.userId);
this.setCurrentUserroles(resp.roles);
this.router.navigate(['/MyAPP/profile', resp.userId]);
},
(error: HttpErrorResponse) => {
console.log(error);
Swal.close();
this.handelError(error,'login Error');
}
);
logout(){
this.token = null;
this.expiresAt = null;
this.setCurrentUserroles = null;
this.setCurrentUserName = null;
this.setCurrentUserId = null;
localStorage.clear();
this.router.navigateByUrl('/login');
}
}
getRoles(){
let token : string = this.getToken();
const headers = new HttpHeaders(
{
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
}
);
return this.http.get(`${this.url}/getRoles`,{headers} )
}
private setToken(token : string){
this.token = token;
}
getToken() : string{
return this.token;
}
private setExpiresAt(expire:number){
this.expiresAt = (expire * 1000) + Date.now();
}
setCurrentUserName(username : string){
this.CurrentUsername = username;
}
getCurrentUserName() : string{
return this.CurrentUsername
}
setCurrentUserId(userId : number){
this.currentUserId = userId;
}
getCurrentUserId() : number{
return this.currentUserId;
}
setCurrentUserroles(CurrentUserroles : RoleModelDTO[]){
this.CurrentUserroles = CurrentUserroles;
}
getCurrentUserroles() : RoleModelDTO[] {
return this.CurrentUserroles;
}
}
(我没有包含服务的所有代码,因为它太大了)
可以看到,登录的时候有一个方法:this.setCurrentUserName(resp.username);
我第一次尝试登录时一切正常:
但是如果我注销并尝试再次登录,我会收到此错误:
当我按 F5 并重新加载页面时,它再次正常工作。
我不明白为什么重新加载它可以工作的页面以及当它只是同一服务中的一种简单方法时我做错了什么。
谢谢!
重要的
我知道我可以这样做:this.CurrentUsername = resp.username; this.currentUserId = resp.userId;
依此类推,但我不想这样做,因为这种方法首先在另一个服务中出现相同的错误,我想知道是什么产生了它