即使在登录Angular后

时间:2018-07-11 02:44:21

标签: angular angular2-routing

Firebase身份验证已集成在角度应用程序中。即使登录到应用程序后,也可以直接在新标签页或浏览器的相同标签页(例如chrome)中点击网址或路由http://localhost:4200/landing 再次进入登录页面。

如果已经登录,是否有办法不跳过登录页面。

复制步骤

    角度CLI项目中的
  1. ng服务将我带到http://localhost:4200/login
  2. 登录后,登录到http://localhost:4200/landing
  3. 打开一个新标签页或在现有标签页类型中,http://localhost:4200/landing按Enter键

预期:它停留在http://localhost:4200/landing

实际:它可以追溯到http://localhost:4200/login

3 个答案:

答案 0 :(得分:0)

我从您的问题中了解到的是,您最初想导航到登录页面,一旦用户已经登录,您就想进入他所输入的路线。 如果要在浏览器中为新标签页或新窗口保留任何数据,则应使用localstorage 登录后,将一些令牌存储在本地存储中。像这样

localStorage.setItem('userId', 'USERID');

现在在init的appComponent中检查本地存储是否不存在,然后仅直接登录。

  ngOnInit() {
if (!localStorage.getItem('userId')) {
  this.router.navigate(['/login']); // i think initially you are redirecting to login so put condition there in app component
}
}

注意:请注意,即使关闭浏览器,它甚至还会保留

答案 1 :(得分:0)

我认为需要进行以下更改。

 constructor(private _firebaseAuth: AngularFireAuth, private router: Router) {
    this.user = _firebaseAuth.authState;
    this.user.subscribe(
      (user) => {
        if (user) {
          this.userDetails = user;              
// Set the UserId
           localStorage.setItem('userId', user.uid);
        } else {
          this.userDetails = null;
        }
      }
    );
  }


  isLoggedIn() {

    if (this.userDetails == null) {
// Check the UserId
      if (localStorage.getItem('userId')) {
              return true;
      }
      return false;

    } else {
      return true;
    }
  }

答案 2 :(得分:0)

您可以在登录页面的 ngOnInit() 方法中重定向到仪表板或主页。像这样

constructor( private router: Router) { }
ngOnInit(): void {if(check_user_login_status){this.router.navigate(['/dashboard']);}}