Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 在密码重置路由上实施角度保护_Angular_Angular Routing_Angular Router_Angular Router Guards - Fatal编程技术网

Angular 在密码重置路由上实施角度保护

Angular 在密码重置路由上实施角度保护,angular,angular-routing,angular-router,angular-router-guards,Angular,Angular Routing,Angular Router,Angular Router Guards,当用户试图手动输入URL时,我在试图找出如何验证密码重置路径时遇到了一个问题。 正确的功能是,用户将通过忘记密码路线,然后向他们发送电子邮件;电子邮件将包含指向密码重置路径的URL,并包含令牌。 我的解决方法是为密码重置路由创建一个特定的保护,我正在验证令牌是否作为查询参数传递到URL中;代码如下: canActivate( next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean | Url

当用户试图手动输入URL时,我在试图找出如何验证密码重置路径时遇到了一个问题。 正确的功能是,用户将通过忘记密码路线,然后向他们发送电子邮件;电子邮件将包含指向密码重置路径的URL,并包含令牌。 我的解决方法是为密码重置路由创建一个特定的保护,我正在验证令牌是否作为查询参数传递到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;
canActivate(
下一步:ActivatedRouteSnapshot,
状态:RouterStateSnashot):可观察的|承诺|布尔| UrlTree{
if(Object.keys(next.queryParams).includes('token')){
返回true;
}
this.router.navigate(['/login']);
返回false;
}

正如您所看到的,这段代码有一个不便之处:如果用户在URL中写入令牌,它将允许他们进入路由

是否有一种方法可以检测导航是否来自电子邮件并基于此进行验证?
提前感谢。

我们过去做这件事的方法之一是编辑我的评论

  • 单击“忘记密码”链接后,发布到服务器
  • 服务器生成令牌,存储它,作为链接发送(url参数)
  • 用户单击电子邮件中的链接
  • 密码重置的路由保护询问服务器令牌是否有效
  • 如果是->服务器发出带有临时cookie的响应,您将使用该临时cookie验证下一个操作
  • 如果没有Route Guard,则会将用户发送到应用程序中未经验证区域的一般错误页面

  • 这能清楚地回答您的问题吗?

    只告诉您组件可以被激活,但令牌验证应该在服务器端进行是,但是如果导航不是来自电子邮件链接,我需要限制对路线的访问。我认为这是不可能的。你们是如何检测电子邮件链接点击事件以创建cookie的?当然,尽管我认为有一个客户端解决方案,但我认为这是一个非常好的解决方案,我将要实现。非常感谢您的帮助。请确保代币也有使用寿命,并且在用户消费时立即过期。我面临着完全相同的情况。你说饼干是什么意思?怎么做?目前,我得到了一个这样的链接:我的想法是检查并以某种方式将链接的令牌发送到Route Guard,然后发送到服务器以进行检查,但不知道在JWT身份验证方案中,您需要如何创建一个不同于常规身份验证令牌的令牌,并且不允许执行任何带有该令牌的请求除了压水堆以外的任何东西。(即,如果后端为C#,则使用特定的身份验证筛选器)