私は、ユーザーを取得して権限を確認するために作成したサービスを持っています。私のアプリでそれを使用すると、私はアプリ全体に持続したい値がgetUser()
メソッドを呼び出すたびにリセットされているように見えます。角2サービスの値が維持されない
マイサービスコードは、このようにある:
import { Injectable } from '@angular/core';
import { MyHttp } from '../my-http/my-http.service';
import { Response } from '@angular/http';
import { MyAuth } from '../my-auth.service';
import { MyAuthUser } from './my-auth-user.ts';
import { Observable } from 'rxjs';
@Injectable()
export class MyUserService {
private currUser: MyAuthUser = {
id: 'UNAUTHENTICATED_USER',
name:'Anonymous',
roles: []
};
constructor(private http: MyHttp, private auth: MyAuth) {}
public extractData(res: Response): MyAuthUser {
let user = res.json();
this.currUser = Object.assign({}, user)
return this.currUser;
}
public getUser(): Observable<MyAuthUser> {
// Check if we already have user
if(this.currUser.id === 'UNAUTHENTICATED_USER') {
// Get user from tokeninfo endpoint
return this.http.get('/myuserendpoint')
.map(this.extractData);
}
else {
// Either user is unauthenticated or user already exists, either way send back whatever is in this.currUser
return Observable.create((observer:any) => {
observer.next(this.currUser);
observer.complete();
});
}
}
public hasRole(role: string): boolean {
if(!this.currUser || this.currUser.id === 'UNAUTHENTICATED_USER') {
throw new Error('User roles is undefined, make sure you call getUser');
}
return !!~this.currUser.roles.indexOf(role);
}
}
私は私のアプリのブートストラップ法でプロバイダとして、それを追加している:
bootstrap(MyAppComponent, [MyUser, ...]);
その後、私は得るために、私のルートコンポーネントでそれを使用していますユーザーが特定の役割を持っているかどうかを確認します。
constructor(private userService: MyUser) {
this.userService.getUser().subscribe((user) => {
this.user = user;
let isDeveloper = this.userService.hasRole('developer');
console.log('IS DEV?: ', isDeveloper);
});
}
this.user
に設定しますが、hasRole()
メソッドを実行すると、サービスのcurrUser
の値を確認するだけで、何とかUNAUTHENTICATED_USER
にリセットされます。私は、この値が、あるメソッド呼び出しから次のメソッド呼び出しまで持続しない理由を理解できません。
私は観察可能なものに精通しているわけではないので、私がそこでやっていることが何かを乱しているかどうかは分かりません。
ここで、 'currUser'が' UNAUTHENTICATED_USER'を返すコード行はどこですか? –
問題は、 'if'ステートメントが' hasRole() 'で実行されるとき、私のhttpリクエストから返されたユーザーとして設定されているにもかかわらず、' this.currUser.id'が再び 'UNAUTHENTICATED_USER'に等しいことです。 – John