在密码重置路径上实施Angular Guard

时间:2020-02-05 00:14:49

标签: angular angular-routing angular-router angular-router-guards

当用户尝试在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中写入令牌,它将允许他们输入路线。

是否可以检测导航是否来自电子邮件并基于此进行验证? 预先感谢。

1 个答案:

答案 0 :(得分:1)

过去我们这样做的一种方法是-编辑我的评论

  1. 单击忘记密码链接后,发布到服务器。
  2. 服务器生成令牌,存储令牌,作为链接发送(参数为网址)
  3. 用户单击电子邮件中的链接。
  4. 密码重置
  5. Route Guard 询问服务器令牌是否有效。
  6. 如果是->服务器发出带有临时cookie的响应,您将使用该cookie来验证下一个操作/多个操作
  7. 如果没有Route Guard将用户引导到应用程序中未经身份验证的区域的一般错误页面。

这样可以清楚地回答您的问题吗?