javascript - 角度全局函数
问题描述
我正在构建一个支持 JWT 身份验证的 Angular 应用程序。我使用 Spring Boot 构建我的 JWT 服务器。用户提供他/她的凭据进行身份验证。成功认证后,包含访问令牌和认证的响应将被转发给用户。我的 JWT 访问令牌中有一个包含令牌寿命的 exp 值。刷新令牌保存在数据库中。要获取新的访问令牌,您必须发送带有此标头的请求 --->>>X-Auth: refreshToken<<<--- 以获取新的访问令牌。我实现了一个函数,它将使用刷新令牌重新发送对访问令牌的请求。我曾尝试实现该功能以全局运行该功能,但无济于事。我想知道是否有一种方法可以在我的 Angular 应用程序中全局运行该函数。
/***Login sample request***/
{
"password": "secret123",
"username": "nkengbeza"
}
/***Login sample response***/
{
"access_token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJua2VuZ2JlemEiLCJhdXRoIjpbeyJhdXRob3JpdHkiOiJBRE1JTiJ9XSwidG9rZW5fdHlwZSI6ImFjY2Vzc190b2tlbiIsImlhdCI6MTU0ODY2OTE0MSwiZXhwIjoxNTQ4NjcyNzQxfQ.oaWOIaeMqLg35unM82bcNg88ga030m5J1k7E5EM2O0s",
"refresh_token": "a102c7a063c7f149bcb276eadf83c0c61659ff9b37c0a8ab7d29e92c08ac94e7aa99abc5e9a3c1c59da4e66f1ada0c6a02dca2f577a4aa3f81885c73f5a879d1"
}
/***Request for an access token using a valid refresh token***/
reLogin() {
(async () => {
const resp = await fetch(AppRoutes.RELOAD_AUTH, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-Auth': this.getAuth().refreshToken
}
});
if (resp.status !== 200) {
this.doLogout();
}
const content = await resp.json();
const accessToken = content.access_token;
const tokenInfo = this.getDecodedAccessToken(accessToken); // decode token
const auth = new Auth();
auth.refreshToken = content.refresh_token;
auth.role = tokenInfo.auth[0];
const expireDate = tokenInfo.exp; // get token expiration dateTime
this.setAccessToken(accessToken);
this.setAuth(auth);
})();
}
解决方案
推荐阅读
- bash - Postgres使用pgpass和别名轻松登录不起作用
- opengl - 使用 OpenGL 绘制数百万个顶点的时间序列
- mysql - 使用 if 条件运行 prepare 语句时出现 1064 错误
- binary - 如何使用减法器进行二进制数比较
- reactjs - 如何在拦截器中使用axios cancelToken?
- r - 尝试针对特定问题编写 R 编程逻辑语句
- java - 嵌套 if 语句在另一个嵌套 if 语句中未捕获
- android - 使用改造上传多张图像时数组格式的问题
- javascript - 在 React 中观察 Three.Js 场景中的属性
- javascript - 当通过地图呈现切换按钮列表时,如何使本机反应切换为真?