我尝试在 Angular 应用程序中插入身份验证系统。 (这个。
完成一切后,我得到了这个代码:
private userCurrentState = new BehaviorSubject<boolean>(this.tokenAuthService.isSignedin());
此错误消息:
'boolean | 类型的参数undefined' 不可分配给'boolean' 类型的参数。
TokenAuthService
代码getJwtToken() {
return localStorage.getItem('auth_token');
}
validateToken() {
const token = this.getJwtToken();
if(token) {
const payload = this.payload(token);
if(payload) {
return Object.values(this.tokenIssuer).indexOf(payload.iss) > -1 ? true : false;
}
}
else {
return false;
}
}
isSignedin() {
return this.validateToken();
}
我该如何修复?
好吧,也许前面的答案可以完成这项工作,但他们没有解释为什么你的函数 validateToken 的返回值会导致未定义。
validateToken(){
const token = this.getJwtToken();
if(token){
const payload = this.payload(token);
if(payload){
return Object.values(this.tokenIssuer).indexOf(payload.iss) > -1 ? true : false;
}
// You will get undefined here if payload is a falsy value
// and thus you are getting <boolean|undefined> as result type.
// One option is to provide else when !payload
} else {
return false;
}
}
调用
this.tokenAuthService.isSignedin()
可能会返回未定义的值,而BehaviorSubject 需要一个布尔值。
您可以通过使用布尔变量来解决此问题,并让该变量检查函数调用以将其自身设置为 true(如果为 true),或者如果为 false 或未定义则设置为 false。
允许
BehaviourSubject
接受 undefined
数据类型。
改变
private userCurrentState = new BehaviorSubject<boolean>(this.tokenAuthService.isSignedin());
到
private userCurrentState = new BehaviorSubject<boolean | undefined>(this.tokenAuthService.isSignedin());
或者
由于您的
isSignedin
取决于 validateToken()
,
将其返回类型标记为 boolean
validateToken(): boolean{
const token = this.getJwtToken();
if(token){
const payload = this.payload(token);
if(payload){
return Object.values(this.tokenIssuer).indexOf(payload.iss) > -1 ? true : false;
}
return false; // you can return false here
} else {
return false;
}
}