当用户尝试在URL中手动输入密码重置路由时,我遇到问题。 正确的功能是用户将使用忘记密码的路线,并从那里发送一封电子邮件给他们。电子邮件中将包含指向 password-reset 路由的URL,并将包含令牌。 我无效的解决方法是为 password-reset 路由创建特定的防护,并且我正在验证令牌是否作为查询参数在URL中传递。这是代码:
canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
if (Object.keys(next.queryParams).includes('token')) {
return true;
}
this.router.navigate(['/login']);
return false;
}
如您所见,此代码有一个不便之处:如果用户在URL中写入令牌,它将允许他们输入路线。
是否可以检测导航是否来自电子邮件并基于此进行验证? 预先感谢。
答案 0 :(得分:1)
过去我们这样做的一种方法是-编辑我的评论
这样可以清楚地回答您的问题吗?