登录时,Angular 6身份验证防护保留在空白页上

时间:2018-07-25 06:14:38

标签: angular typescript

我找到了这个答案,并且正在修改它,使其与我的身份验证一起使用:Angular 6 AuthGuard

但是,当用户成功通过身份验证时,身份验证保护仅进入空白页,而不是转发到URL。请注意,当用户没有令牌时,它可以按预期工作。它会转发到登录页面。

我看到“有效令牌”行的控制台输出,但是没有发生重定向。另外,如果我说“ return true”;在处理程序的顶部,转发有效。

这是我的身份验证防护服务中有问题的代码块:

authenticationHandler(): boolean {
    if (this.myToken) {
      this._auth.validateToken(this.myToken)
        .subscribe((result) => {
          if (result.value) {
            // TODO
            console.log('AuthGuard: valid token');

            this.loggedIn.next(true);
            return true;
          } else {
            this.loggedIn.next(false);
            this._router.navigate(['/login']);
            return false;
          }

        });
    } else {
      this.loggedIn.next(false);
      this._router.navigate(['/login']);
      return false;
    }
  }

  canActivate(): boolean {
    return this.authenticationHandler();
  }

1 个答案:

答案 0 :(得分:1)

您正在订阅函数内返回if($request->email){ $user = InvitedMembers::checkInUserTable($request->email); if(!empty($user)) { $user->status = "Inactive"; $user->save(); $token = auth()->tokenById($user->id); auth()->invalidate($token); auth()->invalidate(true); } } ,该值不会进一步传递给路由保护器。取而代之的是,路由保护程序返回[RegularExpression(@"^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{12,}", ErrorMessage = "Passwords must be at least 12 characters long and contain at least an upper case letter, lower case letter, digit and a symbol")] ,其结果为true

您希望路由守卫在返回之前等待令牌验证。实现此目的的最简单方法是使用async / await语法。

undefined

这样,您的代码在退出路由保护程序之前将具有验证结果。