Angular TokenNoteExpired方法的auth0身份验证问题

Angular TokenNoteExpired方法的auth0身份验证问题,angular,authentication,auth0,Angular,Authentication,Auth0,我正在尝试从angular2应用程序使用auth0进行身份验证。下面是我的身份验证服务(作为我使用的资源和): 作为auth0身份提供程序,我使用数据库。我已经设法使用Auth0 lock对象登录(我正在接收令牌),但是当我想隐藏/显示一些按钮时,tokenNotExpired()方法总是返回false,即使在登录之后也是如此 <button md-button (click)="login()" *ngIf="!authService.isAuthenticated()"> &

我正在尝试从angular2应用程序使用auth0进行身份验证。下面是我的身份验证服务(作为我使用的资源和):

作为auth0身份提供程序,我使用数据库。我已经设法使用Auth0 lock对象登录(我正在接收令牌),但是当我想隐藏/显示一些按钮时,tokenNotExpired()方法总是返回false,即使在登录之后也是如此

<button md-button (click)="login()" *ngIf="!authService.isAuthenticated()">
  <md-icon class="demo-toolbar-icon">input</md-icon>
  Login
</button>

<button md-button (click)="logout()" *ngIf="authService.isAuthenticated()">
  Logout
  <md-icon class="demo-toolbar-icon">exit_to_app</md-icon>
</button>

假设您错过了
tokenGetter
或自定义令牌名称的配置,下面是一个如何配置它的示例

有趣的部分是标记名。我假设id_令牌是真正的令牌

如果需要一些其他逻辑来检索令牌,请取消注释
tokenGetter
,并根据需要实现

import { NgModule } from '@angular/core';
import { Http, RequestOptions } from '@angular/http';
import { AuthHttp, AuthConfig } from 'angular2-jwt';

export function authHttpServiceFactory(http: Http, options: RequestOptions) {
  return new AuthHttp(new AuthConfig({
        tokenName: 'id_token',
        //tokenGetter: (() => <whatEverStorage>.getItem('token')),
    }), http, options);
}

@NgModule({
  providers: [
    {
      provide: AuthHttp,
      useFactory: authHttpServiceFactory,
      deps: [Http, RequestOptions]
    }
  ]
})
export class AuthModule {}
从'@angular/core'导入{NgModule};
从'@angular/Http'导入{Http,RequestOptions};
从'angular2 jwt'导入{AuthHttp,AuthConfig};
导出函数authHttpServiceFactory(http:http,选项:RequestOptions){
返回新的AuthHttp(新的AuthConfig({
令牌名称:“id_令牌”,
//tokenGetter:(()=>.getItem('token')),
}),http,options);
}
@NGD模块({
供应商:[
{
提供:AuthHttp,
useFactory:authHttpServiceFactory,
deps:[Http,RequestOptions]
}
]
})
导出类AuthModule{}

tokenNotExpired
在内部使用
tokenGetter
。您是如何配置的?请参阅angular2 jwt。@CSchulz我不知道我必须配置
tokenGetter
。我遵循了发布的参考资料中的示例。什么配置适合我的情况?我认为更多的是时间问题。来自锁的已验证事件何时发生?它发生了吗?我已将登录按钮的单击事件链接到一个方法。在该方法中,我从弹出锁屏的身份验证服务(发布代码)调用login方法。插入凭据后(我想这是身份验证事件发生时的情况),我被重定向到我的主页。我收到一个令牌您是否调试了
tokenExpired
方法?您可以直接看到方法返回错误值的原因。
tokenNotExpired
方法接受参数:
函数tokenNotExpired(tokenName,jwt){…}
。如果未给定参数,则默认令牌名称为“token”。我必须添加我的令牌名。现在,当token为validSo时,该方法返回true,这将是您的解决方案。用id_令牌试试。在这种情况下,您可以删除
AuthModule
import { tokenNotExpired, AuthHttp, AuthConfig } from 'angular2-jwt';
declare var Auth0Lock: any;

export function authHttpServiceFactory(http: Http, options: RequestOptions) {
  return new AuthHttp(new AuthConfig({
        tokenName: 'id_token',
        tokenGetter: (() => localStorage.getItem('id_token'))
    }), http, options);
}

@NgModule({
  providers: [
    {
      provide: AuthHttp,
      useFactory: authHttpServiceFactory,
      deps: [Http, RequestOptions]
    }
  ]
})
@Injectable()
export class AuthenticationService{

//Configure Auth0
lock =  new Auth0Lock('my_client_id', 'my_domain', {});
import { NgModule } from '@angular/core';
import { Http, RequestOptions } from '@angular/http';
import { AuthHttp, AuthConfig } from 'angular2-jwt';

export function authHttpServiceFactory(http: Http, options: RequestOptions) {
  return new AuthHttp(new AuthConfig({
        tokenName: 'id_token',
        //tokenGetter: (() => <whatEverStorage>.getItem('token')),
    }), http, options);
}

@NgModule({
  providers: [
    {
      provide: AuthHttp,
      useFactory: authHttpServiceFactory,
      deps: [Http, RequestOptions]
    }
  ]
})
export class AuthModule {}