首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角度正确的登录流程和结构

角度正确的登录流程和结构
EN

Stack Overflow用户
提问于 2019-05-11 23:43:42
回答 1查看 392关注 0票数 1

我正在尝试实现一个具有angular的前端,但我不确定我的登录和整体流程是否正确。

我有一个登录页面的登录组件,它将用户信息发送到auth服务进行身份验证,然后我将auth令牌保存在localhost中,并在每次get请求用户数据时发送它,但我还需要检查是否有过期的jwt令牌,因此我注销了用户并从信息中清除了localstorage。但我不确定这种注销应该发生在哪里。

此外,我的主页显示两个不同的视图,无论用户是否登录,所以我在我检查的服务中有一个布尔值。这是我的流程:

login组件:这里的错误绑定到html,假设凭据无效。

代码语言:javascript
复制
export class LoginComponent implements OnInit {
  error : string;

  constructor(private authService : AuthService) { }

  ngOnInit() {
    this.authService.login("Robocop1", "password").subscribe(
      data =>{
        localStorage.setItem('Authorization', data['token'])
        this.auth.isLoggedIn = true
      },
      err  => this.error = err['error']
    );
  }

}

服务组件:

代码语言:javascript
复制
export class AuthService {

  isLoggedIn : boolean = false

  constructor(private httpClient : HttpClient) { }

  login(username, password) {
    return this.httpClient.post('http://localhost:8090/login', {
      username,
      password
    })
  }
}

这是我的home组件,它首先检查用户是否已登录:

代码语言:javascript
复制
export class HomeComponent implements OnInit {

  isLoggedIn : boolean

  constructor(private auth : AuthService) { }

  ngOnInit() {
    this.isLoggedIn = this.auth.isLoggedIn

  }

}

并显示html的不同部分:

代码语言:javascript
复制
   <div *ngIf="!isLoggedIn">
       <p>
           hey user
      </p>
   </div>
   <div *ngIf="isLoggedIn">
       <p>
           not logged
       </p>
   </div>

所以我的问题是,在home组件中插入一个依赖项,只是为了检查单个布尔值,有没有更好的方法。

我也可以有另一个从数据库获取用户数据的数据组件。在post请求中,我将发送身份验证令牌,因此我将拥有如下内容:

代码语言:javascript
复制
this.dataService.getItems().subscribe(
    data =>{
        this.userData = data
    },
    err  => {
        if(err['error' === 'Jwt token has expired'){
            this.authService.logout()
        }else{
            this.error = err['error']
        }
    }
);

那么,再次注入依赖项仅仅是为了调用注销方法是可以的吗?此注销方法应该在authService中还是在其他地方?

EN

回答 1

Stack Overflow用户

发布于 2019-05-12 00:41:28

所以我的问题是,在主组件中插入一个依赖项,好的,只是为了检查单个布尔值,有没有更好的方法来做这件事。,

如果您的应用程序只有几个简单的页面,并且不会扩展,那么您的方法可能就足够了,但对于它来说,最佳实践是使用Angular Route Guards。路由保护是一种CanActivate实现,您可以在其中实现身份验证/授权逻辑来保护您的路由(页面)

那么,再次注入依赖项仅仅是为了调用

方法是可以的吗?此注销方法应该在authService中还是在其他地方?

这应该通过实现一个HttpInterceptor来完成。这样您就不需要为处理错误响应或添加授权令牌而处理每个http调用。捕获http拦截器内部的错误响应并注销是可行的方法。这样,您就不必将相应的服务注入到所需的每个位置。HttpInterceptor也不是什么大问题。您可以遵循this逐步指南并实现您自己的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56091851

复制
相关文章

相似问题

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