angular - isTokenExpired 方法返回 true 和 false

标签 angular jwt angular2-services angular2-jwt

我是 angular 的新手,我正在尝试通过在 Angular 6 上使用 angular-jwt 来验证我的身份验证 token 。验证 token 的目的是在用户登录时允许不同的按钮并显示不同的集合他们注销时的按钮数量。

这是我的 authService。

import { JwtHelperService } from '@auth0/angular-jwt';

constructor(private http:HttpClient, public jwtHelper:JwtHelperService)
{}

loggedIn()
{
  console.log(this.jwtHelper.isTokenExpired(this.authtoken));
}

这是我的一些 HTML 代码

<a *ngIf="!authService.loggedIn()" [routerLink]="['/login']"><button class.....
<a *ngIf="!authService.loggedIn()" [routerLink]="['/register']"><button class.....   
<a *ngIf="authService.loggedIn()" [routerLink]="['/profile']"><button class....
<a *ngIf="authService.loggedIn()" [routerLink]="['/profile']"><button class.....

现在我的问题是在我登录之前,它在控制台上正确地登录为 true,但是在我登录并转到个人资料页面后,按钮不会改变,因为它仍然记录为 true,然后再次记录为 false。

登录前:Before Logging in

登录后: After logging in

我认为这是由于在应用程序模块中使用了 token getter 函数,但我不确定如何实现它。

我的应用模块组件:

....
imports: [BrowserModule,
[JwtModule.forRoot({
config: {tokenGetter:tokenGetter,whitelistedDomains['localhost:3000']}
})]

providers: [AuthService,JwtHelperService]
})

export function tokenGetter() {
return localStorage.getItem('access_token');
}

最佳答案

我目前也是 Angular Js Framework 的新手,并开始通过旧版本学习。所以我对这段代码的修复是我调用了名为 loadToken() 的外部函数,它加载了我的 Auth Token 如果找到,那么我的函数返回 false,否则它返回 true

下面是我试过的代码:

import { JwtHelperService  } from '@auth0/angular-jwt';
//Some More Code might be different for you, so pasting only the required code
export class AuthService {
    authToken : any;
    constructor(private http: HttpClient, private jwtHelper: JwtHelperService) { }
    loadToken(){
        const token = localStorage.getItem('id_token');
        this.authToken = token;
        return this.authToken;
    }
    // Check if the token is Valid
    loggedIn(){
        this.authToken = this.loadToken();
        console.log(this.jwtHelper.isTokenExpired(this.authToken));
        return this.jwtHelper.isTokenExpired(this.authToken);
    }
}

进一步在 HTML 代码中:

<!-- If returned False this will be displayed -->
<li *ngIf = "!authService.loggedIn()" class="nav-item" [routerLinkActive] = "['active']" [routerLinkActiveOptions] = "{ exact: true}">
    <a class="nav-link" [routerLink] = "['/profile']">Profile</a>
</li>
<!-- If returned True this will be displayed -->
<li *ngIf="authService.loggedIn()" class="nav-item" [routerLinkActive] = "['active']" [routerLinkActiveOptions] = "{ exact: true}">
    <a class="nav-link" [routerLink] = "['/register']">Register</a>
</li>
<li *ngIf="authService.loggedIn()" class="nav-item" [routerLinkActive] = "['active']" [routerLinkActiveOptions] = "{ exact: true}">
    <a class="nav-link" [routerLink] = "['/login']">Login</a>
</li>

关于angular - isTokenExpired 方法返回 true 和 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50609071/

相关文章:

java - 解析 JWT token 有效负载数据以在 android/java 中获取特定值

javascript - 为什么let点的值没有被重新分配

typescript - 使用注入(inject)的 Angular 服务作为静态方法中的依赖项

http - 我在哪里可以进行模拟 http 调用来学习 Angular2 前端 http 调用

angular - 导入具有其他名称的组件类

angular - AbstractControl 类型的参数不能分配给字符串类型的参数

javascript - 以 Angular 添加 AsyncValidator 时出错

javascript - 如何在发出的 Highcharts 选择事件回调函数中获取 Angular 组件类引用?

c# - 如何在更改密码后使 token 失效

c# - Asp.Net 多个 AuthenticationSchemas - 用户不会被重定向到 LoginPath Uri