我正在使用auth-guard来保护我的一些路由,并且在检查身份验证的同时,如果当前令牌在不到15分钟内到期,我将获得刷新令牌。我的authenticated()方法返回一个Observable。
问题是当它获取刷新令牌时它显示一个空白页面,即使它已经到达返回Observable.of(true)的代码(至少它显示在控制台中)。控制台没有错误。
如果我没有获得刷新令牌(现在还不是时间),那么我也会返回真正的Observable并且工作正常。
在auth-guard中:
canActivate(): Observable<boolean> {
return this.auth.authenticated();
}
在auth.service中:
authenticated(): Observable<boolean> {
if (isStillValid && currentTime.isAfter(refreshTime)) {
return this._refreshAuthToken()
.map((data) => {
//****IT GETS HERE, BUT DISPLAYS BLANK ****
return Observable.of(true);
})
.catch(() => {
return Observable.of(false);
});
} else {
if (!isStillValid) {
//redirects to login
return Observable.of(false);
}
return Observable.of(true);
}
}
}
_refreshAuthToken:
private _refreshAuthToken() : Observable<object> {
return this._getAuthToken(body, headers)
.catch(err => {
return Observable.throw('Error');
})
.flatMap(data => {
latestRefreshToken = data.refresh_token;
body = "grant_type=refresh_token&refresh_token=" + latestRefreshToken;
headers = new Headers('...');
return this._getAuthToken(body, headers)
})
}
_getAuthToken:
private _getAuthToken(body, headers) : Observable<object> {
return this.http.post(this.restUrl + "/token", body, { headers: headers })
.map(res => res.json())
}
答案 0 :(得分:0)
该函数应返回Oboleanable of boolean但返回
Observable<Observable<boolean>>
如果你在jsbin
中这样做Rx.Observable.of(1)
.map(x=>Rx.Observable.of(true))
.subscribe(x=>console.log(typeof x) // "object"
和
Rx.Observable.of(1)
.map(x=>true)
.subscribe(x=>console.log(x) // "boolean"
所以你的代码应该:
return this._refreshAuthToken()
.map((data) => {
//****IT GETS HERE, BUT DISPLAYS BLANK ****
return true;
})
.catch(() => {
return Observable.of(false);
});