Angularfire2 AngularFireAuthGuard在登录后重定向URL
我使用firebase和AngularFireAuthGuard来保护特定的路由,这样只有经过身份验证的用户才能访问它们。 特别是,我的MainComponent和MgmtComponent应该只能由经过身份验证的用户访问Angularfire2 AngularFireAuthGuard在登录后重定向URL,angularfire2,auth-guard,Angularfire2,Auth Guard,我使用firebase和AngularFireAuthGuard来保护特定的路由,这样只有经过身份验证的用户才能访问它们。 特别是,我的MainComponent和MgmtComponent应该只能由经过身份验证的用户访问 const redirectUnauthorizedToLogin = () => redirectUnauthorizedTo(['/login']); const routes: Routes = [ { path: 'teams/:teamId/sessio
const redirectUnauthorizedToLogin = () => redirectUnauthorizedTo(['/login']);
const routes: Routes = [
{ path: 'teams/:teamId/sessions/:sessionId',
component: MainComponent,
canActivate: [AngularFireAuthGuard], data: { authGuardPipe: redirectUnauthorizedToLogin }
},
{ path: 'mgmt',
component: MgmtComponent,
canActivate: [AngularFireAuthGuard], data: { authGuardPipe: redirectUnauthorizedToLogin }
},
{
path: 'login',
component: LoginComponent
}
];
我的问题是,成功登录后,用户没有重定向回最初请求的URL。
因此,我想要/期望的是:
/mgmt
/login
/mgmt
)步骤1-3可以正常工作,但缺少步骤4。这是一个开放的功能请求,angularfire团队正在处理它: 与此同时,我找到了一个解决办法: 在app-routing-module.ts中,而不是
const redirectUnauthorizedToLogin = () => redirectUnauthorizedTo(['/login']);
我使用以下内容将url存储在sessionStorage中:
const redirectUnauthorizedToLogin = (route: ActivatedRouteSnapshot) => {
const path = route.pathFromRoot.map(v => v.url.map(segment => segment.toString()).join('/')).join('/');
return pipe(
loggedIn,
tap((isLoggedIn) => {
if (!isLoggedIn) {
console.log('Saving afterLogin path', path);
sessionStorage.setItem('afterLogin', path);
}
}),
map(loggedIn => loggedIn || ['/login'])
);
};
在LoginComponent中,我从会话存储中读取要重定向的值:
sessionStorage.getItem('afterLogin');
this.router.navigateByUrl(redirectUrl);
现在特性请求已经存在,您可以使用auth-guard来执行此操作。然而,这些文件并不清楚,所以我是这样做的
/**将重定向URL添加到登录*/
const redirectUnauthorizedToLogin=(下一步:ActivatedRouteSnapshot,状态:RouterStateSnashot)=>{
返回redirectUnauthorizedTo(`/login?redirectTo=${state.url}`);
};
/**如果可以重定向登录用户,则使用redirectTo查询参数,或默认为“/”*/
const redirectLoggedInToPreviousPage=(下一步:ActivatedRouteSnapshot,状态:RouterStateSnashot)=>{
让重定向URL='/';
试一试{
const redirectToUrl=新URL(state.URL、location.origin);
const params=新的URLSearchParams(重定向tourl.search);
redirectUrl=params.get('redirectTo')| |'/';
}捕捉(错误){
//无效的URL
}
返回redirectLoggedInTo(重定向URL);
};