gpt4 book ai didi

注销时 Angular 将 null 设置为用户对象

转载 作者:行者123 更新时间:2023-12-05 08:11:33 25 4
gpt4 key购买 nike

我正在尝试在这个 tutorial 之后在 Angular 中构建一个简单的用户身份验证应用程序.当我在用户注销后尝试将 null 设置为 User 对象时遇到错误。

错误:

ERROR in src/app/_services/authentication.service.ts(40,38): error TS2345: Argument of type 'null' is not assignable to parameter of type 'User'.

相关代码(authentication.service.ts):

import {Injectable} from '@angular/core';
import {HttpClient} from '@angular/common/http';
import {BehaviorSubject, Observable} from 'rxjs';
import {map} from 'rxjs/operators';

import {User} from '@/_models';
import { environment } from 'environments/environment';

@Injectable({providedIn: 'root'})
export class AuthenticationService{
private currentUserSubject: BehaviorSubject<User>;
public currentUser: Observable<User>;

constructor(private http: HttpClient){
this.currentUserSubject = new BehaviorSubject<User>(JSON.parse(localStorage.getItem('currentUser') || '{}'));
this.currentUser = this.currentUserSubject.asObservable();
}

public get currentUserValue(): User{
return this.currentUserSubject.value;
}

login(username: string, password: string){
return this.http.post<any>(`${environment.apiUrl}/user/login/`, {username, password})
.pipe(map(user => {
console.log(user);
// login successful if there is a jwt token in the response
if(user.status && user.data.token){
// store user details and jwt token in local storage to keep user logged in
// between page refreshes
localStorage.setItem('currentUser', JSON.stringify(user));
this.currentUserSubject.next(user);
}
}));
}

logout(){
// remove user from local storage to log user out
localStorage.removeItem('currentUser');
this.currentUserSubject.next(null);
}
}

我可以通过在 tsconfig.json 中设置 "strict": false 来解决问题,但我想遵循最佳实践。知道为什么会发生这种情况以及如何解决它吗?

更新:用户模型是:

export class User {
id!: number;
username!: string;
token?: string;
}

最佳答案

我刚刚找到了解决方案,以防其他人遇到此问题。我试过了,它在我的应用程序中工作,而且我没有禁用严格检查。

  logout() {
// remove user from local storage to log user out
localStorage.removeItem('currentUser');

// get the user nulled - typescript won't care
this.currentUserSubject = new BehaviorSubject<User>(JSON.parse(localStorage.getItem('currentUser')!));
this.currentUser = this.currentUserSubject.asObservable();
}

关于注销时 Angular 将 null 设置为用户对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53826753/

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