首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使AngularFire路由保护将未经授权的用户重定向回着陆页面?

如何使AngularFire路由保护将未经授权的用户重定向回着陆页面?
EN

Stack Overflow用户
提问于 2022-11-25 17:02:12
回答 1查看 40关注 0票数 0

这个路由保护阻止对my-project.com/home的未经授权的访问,但是它将用户重定向到一个空白页面,而不是我的登陆页面。

app-routing.module.ts

代码语言:javascript
复制
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AuthPipe, AuthGuard, AuthGuardModule, AuthPipeGenerator, canActivate, hasCustomClaim, idTokenResult, isNotAnonymous, loggedIn, redirectLoggedInTo, redirectUnauthorizedTo, customClaims, emailVerified, } from '@angular/fire/auth-guard';

// components
import { LandingComponent } from './landing/landing.component';
import { HomeComponent } from './home/home.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';

const routes: Routes = [
  { path: 'landing', component: LandingComponent },
  { path: 'default', component: LandingComponent },
  { path: 'home', component: HomeComponent, canActivate: [AuthGuard], data: { authGuardPipe: redirectUnauthorizedTo(['landing']) }}, // route guard is here
  { path: '', component: LandingComponent },
  { path: '**', component: PageNotFoundComponent },
];

@NgModule({
  imports: [
    RouterModule.forRoot(routes),
    provideAuth(() => getAuth()),
    AuthGuardModule,
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }

这条路线没有编译:

代码语言:javascript
复制
{ path: 'home', component: HomeComponent, canActivate(() => redirectUnauthorizedTo(['/landing'])) },

它传递了以下错误消息:

代码语言:javascript
复制
TS2349: This expression is not callable.
Type '{ path: string; component: typeof HomeComponent; canActivate(): any; }' has no call signatures.

我尝试了AuthPipeAuthPipeGenerator,而不是authGuardPipe (这不是'@angular/fire/auth-guard'的方法)。

我把Auth和Auth引入了app.module.ts,但这并没有帮助。

代码语言:javascript
复制
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { provideAuth, getAuth, } from '@angular/fire/auth';
import { AuthGuardModule } from '@angular/fire/auth-guard';

@NgModule({
  imports: [
    AppRoutingModule,
    provideAuth(() => getAuth()),
    AuthGuardModule, 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-27 15:30:52

我想通了。我失踪了

代码语言:javascript
复制
const redirectUnauthorizedToLanding = () => redirectUnauthorizedTo(['landing']);

现在我的代码起作用了。

代码语言:javascript
复制
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { AuthGuard, redirectUnauthorizedTo } from '@angular/fire/auth-guard';

// components
import { LandingComponent } from './landing/landing.component';
import { HomeComponent } from './home/home.component';
import { PageNotFoundComponent } from './page-not-found/page-not-found.component';

const redirectUnauthorizedToLanding = () => redirectUnauthorizedTo(['landing']); // this was missing

const routes: Routes = [
  { path: 'landing', component: LandingComponent },
  { path: 'default', component: LandingComponent },
  { path: 'home', component: HomeComponent, canActivate: [AuthGuard], data: { authGuardPipe: redirectUnauthorizedToLanding }},
  { path: '', component: LandingComponent },
  { path: '**', component: PageNotFoundComponent },
];

@NgModule({
  imports: [
    RouterModule.forRoot(routes),
  ],
  exports: [RouterModule]
})
export class AppRoutingModule { }

不需要将'@angular/fire/auth'导入app-routing.module.ts

不需要将'@angular/fire/auth-guard'导入app.module.ts

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

https://stackoverflow.com/questions/74575931

复制
相关文章

相似问题

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