Firebase身份验证已集成在角度应用程序中。即使登录到应用程序后,也可以直接在新标签页或浏览器的相同标签页(例如chrome)中点击网址或路由http://localhost:4200/landing 再次进入登录页面。
如果已经登录,是否有办法不跳过登录页面。
预期:它停留在http://localhost:4200/landing
实际:它可以追溯到http://localhost:4200/login
答案 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']);}}