我正在使用 ASP.NET Core Web API 和 Angular 13 開發一個專案。
來自端點的登錄發布請求是:
> https://localhost:44396/api/v1/auth/login
{
"status_code": 200,
"message": "Successfully Logged In",
"result": {
"token": "gggggffffffffffffdddddddddddd",
"user": {
"id": 3,
"user_name": "smith",
"last_login": "2022-01-03T12:35:26.0305649"
},
"roles": [
"Teacher"
],
"expires": "2022-01-03T14:40:33Z"
}
}
這是角代碼:
user.ts:
export interface IResponse<T> {
message: string;
error: boolean;
code: number;
results: T;
}
export interface IUser {
userName?: string;
lastLogin?: Date;
token?: string;
roles?: string[];
expires?: Date;
}
auth.service.ts:
export class AuthService {
baseUrl = environment.apiUrl;
private currentUserSource = new ReplaySubject<IUser>(1);
currentUser$ = this.currentUserSource.asObservable();
constructor(private http: HttpClient, private router: Router) { }
login(model: any){
return this.http.post(this.baseUrl 'auth/login', model).pipe(
map((res: IUser)=>{
const user = res;
if(user){
this.setCurrentUser(user);
}
})
)
}
setCurrentUser(user: IUser){
if(user){
user.roles = [];
const roles = this.getDecodedToken(user.token).role;//copy token to jwt.io see .role
Array.isArray(roles) ? user.roles = roles : user.roles.push(roles);
localStorage.setItem('user', JSON.stringify(user));
this.currentUserSource.next(user);
}
}
getDecodedToken(token: string) {
return JSON.parse(atob(token.split('.')[1]));
}
}
我收到此錯誤:
error TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
這段代碼突出顯示在setCurrentUser:user.token
我該如何解決?
uj5u.com熱心網友回復:
請試試
const roles = this.getDecodedToken(user.token || '').role;
uj5u.com熱心網友回復:
嘗試通過以下方式更改代碼中的“if(user){”:
if (user && user.token) {
盡管您的界面說它是可選的,但TypeScript 知道user.token確實存在應該就足夠了。
如果它不起作用,請嘗試以下變體:
if (user && user.token != null) {
uj5u.com熱心網友回復:
您可以更改界面:
export interface IUser {
...
token: string;
}
如果你確定你總是會得到一個令牌,只要你得到一個用戶。
或者,您可以顯式斷言字串型別:
// Change this:
this.getDecodedToken(user.token)
// to this:
this.getDecodedToken(user.token as string)
最好的辦法是確保你有一個,就像另一個答案所暗示的那樣:
if (user && user.token) {...}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/403082.html
標籤:
