angular - Angular 接口中的 atob
问题描述
我正在尝试解决令牌存储问题,在我看来,这可能是通过接口完成的。我当前的登录代码如下:
import { Component } from '@angular/core';
import { FormBuilder } from '@angular/forms';
import { HttpClient } from '@angular/common/http';
interface User {
success: {
id: number;
role: string;
accessToken: string;
refreshToken: string;
lifetime: {
epoch: number;
timeZone: number;
}
}
}
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css'],
})
export class LoginComponent {
constructor( private fb: FormBuilder, private http: HttpClient ) { }
loginInfo = this.fb.group({
email: [''],
password: ['']
})
onSubmit() {
this.http.post<User>('', this.loginInfo.value)
.subscribe(x => localStorage.setItem("currentUser",JSON.stringify(x)))
};
}
唯一的问题是refreshToken 和accessToken 进入Base64,据我所知,只能通过atob() 函数解决。是否可以在界面中初步解决?
我了解以下代码不起作用,但这只是为了使目标更清晰:
interface User {
success: {
id: number;
role: string;
accessToken: atob(string);
refreshToken: atob(string);
lifetime: {
epoch: number;
timeZone: number;
}
}
}
解决方案
您可以尝试将接口更改为 class 并使用 getter 来解决 base64 令牌,例如:
class UserSuccess {
id: number;
role: string;
get accessToken(): string {
return atob(this._accessToken);
}
set accessToken(value: string) {
this._accessToken = value;
}
private _accessToken?: string;
get refreshToken(): string {
return atob(this._refreshToken);
}
set refreshToken(value: string) {
this._refreshToken = value;
}
private _refreshToken?: string;
lifetime: {
epoch: number;
timeZone: number;
}
}
class User {
success: UserSuccess;
}
直接在界面上是不可能的。希望这可以帮助。
推荐阅读
- amazon-web-services - 通过 CloudFront 和 S3 存储桶静态 Web 托管提供私有动态内容
- css - 在 WordPress 中删除 ConvertKit 表单上的默认样式
- ng-lightning - 为什么 ng-lightning 日期选择器在选择日期时不触发(更改)事件?
- node.js - 示例 Hello World Express 应用程序正在返回二进制数据
- python - matplotlib 中 twinx() 期间的 RuntimeError
- java - 在 Spring 中替换 bean 进行测试
- php - 列出所有变体,显示其与 Woocommerce 产品循环上的变体相关联的属性
- html - 使用 div 而不是列表是不好的做法吗?
- django - Django - 权限取决于订阅类型
- python - django 两个过滤器在合并时具有不同的键名且具有相同的键名