私は、サーバー側のためにNodeJS
とクライアント側のためにAngular 2
を使用してWebアプリケーションを構築しています。角2認証サービスの適切な使用
私はADFS
を使用してユーザーを認証しています。
ユーザはウェブサイトを閲覧し、自動的にADFS
認証サーバにリダイレクトされます。ユーザーが認証を完了すると、彼は私のアプリケーションにリダイレクトされ、ユーザーデータはADFS
サーバーから取得されます。
passport-saml
パッケージを使用して認証を実装しても問題ありません。 ユーザーはreq.user
に保存されます。
私はクライアント側でユーザーのデータを使用する必要があります。
は少し研究した後、私は、サーバーからクライアントへのユーザーのデータを渡すことと同じくらい簡単することができることを見出し:
router.get('/user/current', AuthMiddleware.requireLogin, (req: express.Request, res: express.Response) => {
return res.json(req.user);
});
これも同様に動作します。クライアント側のために今
: は私が認証されたユーザを取得するサービスを作成しました:
@Injectable()
export class AuthService {
private authUrl = 'http://localhost/api/user/current';
private currentUser: User;
constructor(private http: Http) {
this.getUser().subscribe(user => {
this.currentUser = user;
});
}
getUser(): Observable<User> {
return this.http.get(this.authUrl)
.map((res: Response) => res.json())
.catch(error => Observable.throw(error.json().error || 'Server Error'));
}
isAuthenticated(): boolean {
return !!this.currentUser;
}
}
のでgetUser
方法は、私のユーザーとObservable
を返し、私は私のクライアント - でそれを使用することができます側。
しかし、私の質問は:
は、私は、認証されたユーザーを使用する各コンポーネントにAuthService
を注入すべきか? その場合は、毎回getUser
に電話をかけ、Observable
がユーザーのデータを返すのを待つか、認証されたユーザーにpublicパラメーターを使用する必要がありますか? (例えばAuthService
にcurrentUser
パラメータpublic
を作り、その後、ちょうどauthService.currentUser
を使うのか?)
私のアプリケーションではガードがありますが、ガードはルートを保護するだけで、これは私が探しているものではありません。私がこの質問で述べたように、ルートを保護するだけでなく、コンポーネント自体にユーザーのデータを取得する必要があります。たとえば、ユーザーモデルにはアクセス許可が含まれており、そのアクセス許可がどのようなアクセス許可を表示したいのですか。 – Ron537
。それにアクセスする必要のある各コンポーネントにAuthServiceを注入することは、一つの方法です。また、AuthServiceからの許可情報の取得を処理する抽象基本コンポーネントを作成することもできます。この情報を必要とするコンポーネントは、ベースコンポーネントから継承できます。 –