gpt4 book ai didi

javascript - 在我的 Angular 2 应用程序中使用 JWT 并将其存储在 localStorage 中。但是,当该项目不存在时我该如何处理?

转载 作者:数据小太阳 更新时间:2023-10-29 05:39:14 26 4
gpt4 key购买 nike

我创建了一个 token-service.ts 来调用我的后端 auth API,它返回一个 JWT。我将此 JWT 存储在本地存储中,如我的 getToken() 中所示:

getToken() {
this.http.post('myAuthEndpoint', { credentials })
.subscribe((res) => {
const token = res.headers.get('Authorization')
localStorage.setItem('id_token', token);
});
}

在我的 app.component.ts 中,我在我的 ngOnInit 方法中调用了 getToken()

但是,这是我的 app.component.html 中的内容:

<navigation-top></navigation-top>
<router-outlet></router-outlet>

这就是我遇到问题的地方 - 在我的 NavigationTop 组件中,我从我的 top-navigation.service.ts 调用我的 getNavigationTop() 来填充链接和内容。我在 getNavigationTop() 中进行的 API 调用需要我在 getToken() 中获得的身份验证 token ,但它在初始化时为空。

我该如何处理这种情况?现在,当我在第一次加载后重新加载页面时它可以工作,因为这样我就可以从 localStorage 获取值:

getNavigationTop(): Observable<any> {
let headers = new Headers({ 'Authorization': localStorage.getItem('token') });
let options = new RequestOptions({ headers: headers });
let data = this.http
.get('my url', options)
.map((res: Response) => {
return res.json().navTop;
})
.catch(this.handleError);
return data;
}

谢谢

最佳答案

将它们移动到服务中,并将其作为提供者添加到您的主模块中。

然后在下面执行此操作。然后,您可以将该服务注入(inject)任何组件并随意调用它们。

@Injectable()
export class TokenService {
getToken() {
this.http.post('myAuthEndpoint', { credentials })
.subscribe((res) => {
const token = res.headers.get('Authorization')
localStorage.setItem('id_token', token);
this.getNavigationTop(token);
});
}


getNavigationTop(token?): Observable<any> {
let headers = new Headers({ 'Authorization': token ? token: localStorage.getItem('token') });

然后在组件中:

import {TokenService} from '..../';

...



@Component
export class NavigationTop {

constructor(private tokenService: TokenService) {
}

ngOnInit() {

this.tokenService.getToken();
}

现在,如果您稍后再次运行 getNavigationTop,它将首先检查 token 参数(可选),但如果不存在,则尝试使用 localstorage。

关于javascript - 在我的 Angular 2 应用程序中使用 JWT 并将其存储在 localStorage 中。但是,当该项目不存在时我该如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41251863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com