angular - 在 Angular 9 中使用 Oauth2 令牌刷新
问题描述
我有一个具有 oAuth2 用于登录的应用程序。以下是localStorage
成功存储的关键值
这是我的login.ts
login(email: string, password: string) {
const user = new FormData();
user.append("username", email);
user.append("password", password);
user.append("grant_type", grantType);
this.http.post<any>("api1", user).pipe(
switchMap((response) => {
localStorage.setItem("token", response.access_token);
localStorage.setItem("expiresIn", response.expires_in);//3200
localStorage.setItem("refreshToken", response.refresh_token);
localStorage.setItem("tokenType", response.token_type); //bearer
this.myToken = response.access_token;
console.log(this.myToken);
if (this.myToken) {
const body = new HttpParams().set("username", email).set("password", password);
const headers = new HttpHeaders({
"Content-Type": "application/x-www-form-urlencoded",
Authorization: `${this.myToken}`
});
return this.http.post<any>("api2", body, { headers: headers });
} else {
alert("error: Not authorized");
return EMPTY;
}
})
).subscribe(
(response) => { console.log(response) },
(error) => { }
);
}
下面是我的auth.interceptor.ts
。访问令牌到期后如何使用我的刷新令牌?
import {
HttpInterceptor,
HttpRequest,
HttpHandler,
HttpHeaders,
} from "@angular/common/http";
import { Injectable } from "@angular/core";
import { AuthService } from "./auth.service";
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private authService: AuthService) {}
intercept(req: HttpRequest<any>, next: HttpHandler) {
const authToken = localStorage.setItem("token", response.access_token);;
const headers = new HttpHeaders({
Authorization: `${authToken}`,
});
const authRequest = req.clone({ headers });
return next.handle(authRequest);
}
}
解决方案
推荐阅读
- c#-4.0 - 无法使用 Rebex C# 压缩和加密 100MB 文件
- macos - Silverstripe 4.4 在 CMS / Safari / Mac / OS 10.14 中浏览文件
- c# - Unity GooglePlayGames LoadScores 始终不返回任何内容
- python - 如果依赖项中存在无法解决的冲突,则 Pip 安装会陷入无限循环
- c# - 在仍在运行的线程上调用方法
- c# - .net 内核上的 Ubuntu 写入文件 | System.IO.IOException:权限被拒绝
- asp.net-core-2.1 - 为什么 Antiforgery CookieSecurePolicy 不适用?
- pip - 如何使用 pip (certbot-dns-hetzner) 安装 SnapStore 中不可用的 certbot dns 插件
- scala - 递归价值链0需求类型
- javascript - 从函数外部访问从函数获取的值