Angular 5身份验证
我试图了解与Angular和.Net核心的身份验证过程,它向我发送了一个jwt持票人令牌(Works)。所以我的问题是,我不知道我应该怎么做在守卫和身份验证服务来正确地管理用户(以后有角色)。但我尝试了一些东西,现在我不知道我应该在我的AuthService中做什么。Angular 5身份验证
编辑 登录后,我会从服务器得到一个令牌和到期日期。所以我想存储这些,后来还声称,但idk如何。和我应该回来的。
这是我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');
}
}
现在我不知道如何检查,如果令牌是存在的,如果其显着如何返回boolean变量。之后登录完成后,检查未来调查也很重要?
和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}});
}
}
回答:
只是我的意见和想法。
就我个人而言,我会在我的登录方法中执行此操作。这实际上会返回一个Observable。注意:您需要在您的登录组件中进行订阅。
login(email:string, password:string) :Observable<boolean>{ return this.http.post('/login', {email, password})
.map(data => {
let userAuth = data;
if(userAuth) {
localStorage.setItem('currentUser', JSON.stringify(userAuth));
return true;
}else{
return false;
}
}
}
现在关于你的警惕。你检查确实很周。你可以提出请求来检查它是否有效,但这会让你的应用程序非常慢。在我看来,最好只检查令牌在前端是否有效。这假定您的后端服务在每个请求上检查标记。由于前端的所有内容都可以修改,所以在你的前端没有保存的方法来处理这个问题。同样,只要确保您的后端在您的请求中检查您的令牌。
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> { if(localStorage.getItem('currentUser') &&
JSON.parse(localStorage.getItem('currentUser')).expireTime < new Date().getTimeInMillis()){ //You need to have the expire value in your token.
return true;
}
this.router.navigate(['auth/login'], {queryParams: { returnUrl: state.url}});
}
以上是 Angular 5身份验证 的全部内容, 来源链接: utcz.com/qa/263612.html