我正在尝试使用 Angular 和 .Net 核心来了解身份验证过程,它向我发送了一个 jwt Bearer 令牌(Works)。所以我的问题是我不知道我应该在警卫和身份验证服务中做什么来正确管理用户(稍后使用角色)。但是我尝试了一些东西,现在我不知道我应该在我的 AuthService 中做什么。
编辑 登录帖子完成后,我将从服务器获得令牌和到期日期。所以我想存储这些,然后再声明,但我知道如何。以及我应该返回什么。
这就是我的 AuthService 的样子:
@Injectable()
export class AuthService {
isLoggedIn = false;
constructor(private http: HttpClient) {}
login( email:string, password:string ) :Observable<boolean>{
this.http.post('/login', {email, password})
.subscribe(data =>
{
//TODO: check for Token ???
let userAuth = data;
if(userAuth) {
localStorage.setItem('currentUser', JSON.stringify(userAuth));
return true;
}else{
return false;
}
},
(err: HttpErrorResponse) => {
if(err.error instanceof Error){
console.log("error client side");
}else{
console.log("Server side error.");
}
});
//what should i return ????? and how
}
logout() {
localStorage.removeItem('currentUser');
}
}
现在我不知道如何检查令牌是否存在以及如何返回布尔值(如果它是 Observable)。登录完成后检查未来调查也很重要?
m AuthGuard 看起来像这样:
@Injectable()
export class AuthGuardService implements CanActivate{
constructor(private router:Router) { }
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):
boolean | Observable<boolean> {
if(localStorage.getItem('currentUser')){
return true;
}
this.router.navigate(['auth/login'],
{queryParams: { returnUrl: state.url}});
}
}