私は自分のページを置くために角度ルーティングの認証書を置いた。私は、トークンが有効かどうかをチェックし、それに基づいて、さらなるナビゲーションのために真または偽を返すことを望むAPIを持っています。角度認証方式のAPI応答メッセージに基づいてtrue/falseを返すにはどうすればよいですか?
しかし、「購読」では、購読外で永続的でない「結果」フラグを割り当てているようです。ここでは「結果」の変数が間違っていますか?どうすれば修正できますか?私の間違いを以下のコードで理解するのを助けてください。
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
const jwt = localStorage.getItem('jwt');
let result = false;
this.signinService.isSignedin(jwt).subscribe((res) => { // <---
console.log(res.json().message);
if (res.json().message === 'Token Valid') {
result = true;
console.log(result);
return true;
} else {
result = false;
return false;
}
}, (err) => { // <---
console.log(err);
result = false;
return false;
});
console.log('END' + result);
return result;}
上記のコードは、以下の順序でコンソールに表示されます。これは私にとっては奇妙なものです。誰でも説明できますか?
を使用すると、定義されたコールバック関数が実行される前に、結果の値が返された
トークン有効
真
あなたがすることはできません。そのため、このメソッドはPromiseまたはObservableを返すこともできます。これらの型では、ブール値**を非同期で返すことができます**。そうした場合、ルータは返されたobservable/promiseを購読し、ブール値が送出されたときにナビゲートします(またはしない)。 –
お返事のいずれかがお手伝いしましたか? :) – Alex
はい、それは私が私はAPIの呼び出しからブール値を返すことができないことを理解させた。だから私は以下のコメントで述べたように、今はjwtの存在でそれを行い、それに応じてブール値を返すことに決めました。私は、ユーザーが投稿したときだけ、サーバー側のトークンを確認します。 – notsogoodcoder