首页
学习
活动
专区
圈层
工具
发布

角5认证
EN

Stack Overflow用户
提问于 2017-12-18 13:13:37
回答 1查看 1.4K关注 0票数 2

我正在尝试理解带有.Net内核的身份验证过程,它向我发送了一个jwt Bearer (Works)。因此,我的问题是,我不知道我应该做什么,在警卫和奥斯服务,以正确地管理用户(在以后的角色)。但我尝试了一些东西,现在我不知道我应该在我的AuthService做什么。

编辑我将获得一个令牌和到期日期后,从服务器登录张贴是完成。所以,我想存储这些和后来也声称,但懒惰如何。以及我应该返回的东西。

这就是我的AuthService的样子:

代码语言:javascript
复制
@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');
 }
}

现在,我不知道如何检查令牌是否存在,以及如何返回布尔值(如果可以观察到的话)。并且在登录完成后,还有什么也是重要的,以检查以后的调查?

M AuthGuard如下所示:

代码语言:javascript
复制
@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}});

 }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-18 14:41:55

只是我的意见和想法。

就我个人而言,我会在我的登录方法中这样做。这实际上是一个可以观察到的结果。注意:您需要在登录组件中订阅。

代码语言:javascript
复制
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;
      }
    }
}

现在是关于你的警卫。你检查一下确实是非常的一周。您可以请求检查它是否有效,但这会使您的应用程序变得非常慢。在我看来,最好只是检查令牌在前端是否有效。这假设您的后端服务检查每个请求的令牌。因为前端上的所有东西都可以修改,所以在前端没有保存的方法来处理这个问题。同样,确保后端检查overy请求上的令牌。

代码语言:javascript
复制
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}});
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47869285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档