我找到了这个答案,并且正在修改它,使其与我的身份验证一起使用: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();
}
答案 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
这样,您的代码在退出路由保护程序之前将具有验证结果。