当前位置: 首页 > 知识库问答 >
问题:

Angular 7中的路由和授权

施凡
2023-03-14

我尝试在Angular 7中通过路由实现标准JWT授权。我的app-routing.module.ts部分:

{
    path: '',
    component: MainComponent,
    canActivate: [AuthGuard]
      },
  {
    path: '401',
    component: UnauthorizeComponent
  }

我也有auth.service.ts:

const helper = new JwtHelperService();
const myRawToken = localStorage.getItem('token');
const isExpired = helper.isTokenExpired(myRawToken);

@Injectable()
export class AuthService {

...

  public isAuthenticated(): boolean {
    return !isExpired;

@Injectable()
export class AuthGuardService  implements CanActivate {

...

  canActivate(): boolean {
    if (!this.auth.isAuthenticated()) {
      this.router.navigate(['401']);
      return false;
    }
    return true;
  }
}

在Heade组件中,我有带有“login”项的下拉列表,我的代码有:

sendLogin() {

    const body = new HttpParams()
      .set('username', this.loginForm.value.login)
      .set('password', this.loginForm.value.password);

    this.authService.login(body.toString())
      .pipe(
        catchError(err => {
          return ......;
        }))
      .pipe(
        tap(resp => {
          localStorage.setItem('token', resp.headers.get('Authorization'));
          this.router.navigate(['']);
        }))
      .subscribe();
  }

我做错了什么?

如何刷新令牌?

共有1个答案

蓟安歌
2023-03-14

如果您的令牌位于本地存储中,则任何服务都会在初始化时从那里获取它。因此,在授权期间,您将令牌放在localStorage中,但guard引用的授权服务在其变量中保留了一个变量,该变量还没有来自localStorage的令牌。因此,使用F5,您启动了一个服务,而它已经看到了它。有必要扩展授权服务,以便在得到答案后,立即将令牌变量中的数据

 类似资料:
  • 1.1.0版本新增了路由授权功能,采用RBAC权限管理方式实现。 每个ISV(appKey)对应一个或多个角色 每个角色分配多个路由权限 接口跟角色相关联,ISV拥有哪些角色,就具有角色对应的接口访问权限。 假设把路由a,b,c分配给了VIP角色,那么具有VIP角色的ISV可以访问a,b,c三个路由。 默认情况下,接口访问时公开的,ISV都能访问。如果要设置某个接口访问权限,在@Open注解中指定

  • 我正在使用react路由器v4和redux,如果用户未登录,我想使用私有和受保护的路由重定向。 我有一个路由组件: 它是这样实现的: 这是私人路线: 传递prop的最佳方式是什么,如果我连接Routes组件并从那里传递是否可以,或者应该从其他地方传递,或者连接需要它的每个组件并从那里读取?此外,这种方法如何处理嵌套路由,如?谢谢

  • 我必须表,我正在验证与,。我已经相应地更改了警卫和提供者的配置/auth.php。 现在我有一些守卫的路线为像: 我在上面的路径上应用,它将我踢回登录页面(),而不是管理员仪表板页面。 为什么,我错过了什么?

  • 问题内容: 在安装组件之前进行授权检查的最佳实践是什么? 我使用react-router 1.x 这是我的路线 这是我的仪表板组件: 问题答案: 更新了 React Router v4的* 解决方案 * 反应路由器到v3 使用’onEnter’事件并在回调中检查用户是否被授权:

  • 问题内容: Angular在路由上不提供任何授权/访问权限(我说的是默认的Angular路由1.x,而不是beta 2.0或UI路由)。但是我必须执行它。 我遇到的问题是我有一项服务,该服务调用服务器以提供此信息并返回承诺。但是,此数据仅获取一次,然后缓存在客户端上,但是仍然需要获取一次。 我现在想处理检查下一条路由是否定义了特定属性的事件。然后,该处理程序应使用我前面提到的服务获取该数据,并根据

  • 问题内容: 我正在将node与express和passportjs一起使用,以限制对位于私有文件夹中的文件的访问。我将代码简化为以下内容。公共静态文件夹中的所有内容都可以正常工作,但通过使用staticMiddleware定位到私有文件夹的路由将返回404错误。 我使用的以下参考似乎对其他人有用,因此我一定会丢失一些东西。这对我来说不起作用,对于私有区域中的内容仅显示404响应。 我本可以发誓我以