如果用户未使用AngularFireAuth进行身份验证,则我正在编写防护措施以将用户重定向到登录页面。如果没有该库,我会将令牌存储在本地/会话存储中,并且当防护触发时,我将检查存储以查看令牌是否存在。AngularFireAuth将令牌存储在数据库中(其中包含身份验证信息):
但是,直接进行检查是不明智的,因为AngularFireAuth可能会在将来的任何时间更改其工作方式。它不完全是已记录的公共API的一部分。
在较旧版本的AngularFireAuth中,我可以在服务中包含此方法以执行此检查:
import { AngularFireAuth } from '@angular/fire/auth';
export class AuthService {
constructor(private readonly service: AngularFireAuth) {}
public login(credentials: Credentials) {
const { email, password } = credentials;
return this.service.auth.signInWithEmailAndPassword(email, password);
}
public isLoggedIn(): boolean {
return !!this.service.auth.currentUser;
}
}
但是,刷新后这种情况不会持续。因此,当我在系统中导航时,它可以正常工作,但是如果我刷新或离开然后再回来,则提示我重新登录。
如何编写isLoggedIn
可以在我的守卫中调用的方法?
我建议使用AngulaFireAuthGuard。无需添加任何特殊方法,它即可为您处理所有事情。
因此,您可以在应用程序路由模块内部直接添加它,而不必使用常规的防护措施。
这是一个例子:
进入app.module:
import { AngularFireAuthGuardModule } from '@angular/fire/auth-guard';
@NgModule({
declarations: [],
imports: [
AngularFireAuthGuardModule,
],
providers: [],
bootstrap: []
})
并进入app-routing.module:
import { AngularFireAuthGuard, redirectUnauthorizedTo, redirectLoggedInTo } from '@angular/fire/auth-guard';
const redirectUnauthorizedToHome = () => redirectUnauthorizedTo(['home']);
const redirectLoggedInToAccount = () => redirectLoggedInTo(['my-account']);
const routes: Routes = [
{ path: 'my-account', component: MyAccountComponent, canActivate: [AngularFireAuthGuard], data: { authGuardPipe: redirectUnauthorizedToHome } },
{ path: 'create-account', component: CreateAccountComponent, canActivate: [AngularFireAuthGuard], data: { authGuardPipe: redirectLoggedInToAccount } },
];
您可以从此处查看详细信息:https : //github.com/angular/angularfire/blob/master/docs/auth/router-guards.md
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句