我可以在登录后获取令牌的值,因为我从函数中传入了用户名和密码的值。在下一页,我没有传递这些值。这对于我为什么变为null是有道理的 - 这是在我没有在承诺中包装令牌返回的时候。当我在下面看到的promise中包装令牌值时,我收到此错误错误类型错误:无法读取属性'然后'未定义,令牌未定义这是因为我没有登录我需要生成令牌的用户凭据,因此它不存在或未定义。在用户登录之前,我将如何调用该函数。假设当我调用第二页时我不会返回null,因为就像我上面提到的那样,我包装了我的存储保证返回。谢谢!
Auth.ts
login(userName: string, password: string, route: string = null): any {
this.logout(false);
this.doLogin(userName, password)
.subscribe(response => {
let token:string = JSON.stringify(response.access_token);
this.storage.set('token', token);
});
}
getToken() :any{
this.storage.get('token').then((val) => {
this.accessToken = val;
if(this.accessToken == null){
return '0'
}
else{
return "Bearer " + this.accessToken.replace(/["]+/g, '')
}
})
}
component.ts
login(){
this.authService.login(this.account.username, this.account.password)
}
Interceptor.ts
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let access = this.auth.getToken()
const authReq = req.clone({
setHeaders: {
Authorization: access
}
});
return next.handle(authReq)
}
谢谢!
答案 0 :(得分:0)
promise方法中的return语句不起作用。 storage.get()是一个异步函数的promise,因此值返回在这里不起作用。您需要将一个回调函数传递给getToken方法并在then()函数内调用它,或者必须在Interceptor.ts中的get方法的then()函数内编写拦截逻辑。