如何使用 AngularFire2 中的 emailVerified 重定向电子邮件未验证的用户?

How do I use emailVerified from AngularFire2 to redirect a user whose email in not verified?

我找不到使用 emailVerified AngularFire2 导出管道重定向电子邮件尚未从特定路由验证的用户的示例。

提供了有关如何使用 redirectLoggedInTo(redirect)、redirectUnauthorizedTo(redirect) 和 hasCustomClaim(claim) 的用例。

A​​ngularFire 团队很方便地避免在他们的 GitHub 页面上放一个例子:https://github.com/angular/angularfire/blob/master/docs/auth/router-guards.md

在源代码中emailVerified是:

export const emailVerified: AuthPipe = map(user => !!user && user.emailVerified)

所以你可以像这样使用第二个 map:

import { AngularFireAuthGuard, emailVerified } from '@angular/fire/auth-guard'
import { map } from 'rxjs/operators'

...

const redirectUnverifiedUser = () =>
  pipe(
    emailVerified,
    map(emailVerified => {
      if (emailVerified) {
        return true;
      } else {
        return ['login', 'verify-email']
      }
    })
  );

...然后在您的路由配置中:

{
  path: 'example',
  ...
  canActivate: [AngularFireAuthGuard],
  data: { authGuardPipe: redirectUnverifiedUser },
},

如果您需要将 未授权 用户重定向到您的登录页面,同时还需要将未验证电子邮件的 授权 用户重定向到一个不同的页面然后你可以使用这个:

import { AngularFireAuthGuard, AuthPipeGenerator } from '@angular/fire/auth-guard'
import { map } from 'rxjs/operators'

...

const redirectUnauthorizedOrUnverifiedUser: AuthPipeGenerator = () =>
  map(user => {
    if (user) {
      if (user.emailVerified) {
        return true
      } else {
        return ['login', 'verify-email']
      }
    } else {
      return ['login']
    }
  })

...然后在您的路由配置中:

{
  path: 'example',
  ...
  canActivate: [AngularFireAuthGuard],
  data: { authGuardPipe: redirectUnauthorizedOrUnverifiedUser },
},