0

角度2の方が新しいです。アプリケーションがあり、アプリケーション内のすべてのページで、現在ログインしているユーザー名と割り当てられた役割をヘッダーコンポーネントに表示する必要があります。私が持っている:取得するにはRESTエンドポイントを呼び出すための各ページにログイン名と役割を表示する角度2

  • ユーザーモデル(例えば、ユーザ名、役割、そしてその人の名前として表示するために必要なフィールドを持つユーザー・インターフェース)
  • ユーザーサービス(サービスクラスを私たちの認証システムからのデータ

ログインからユーザー情報を簡単に取得できますが、これは有効なJSONとして表示されますが、私のサービスを呼び出すことなくすべてのページ(コンポーネント)に表示する方法すべての単一コンポーネント?理想的には、ログインページの後にヘッダーまたは開始コンポーネントがユーザーオブジェクトをロードし、それを後続のすべてのコンパウンドに注入または渡しますntsなので、ユーザーオブジェクトはコンポーネントからコンポーネントに格納されるため、アプリケーションのロード時には1つのhttpコールしか必要ありません。

本質的に私は、これに最もよくストリームされたアプローチを探しています。これは一般的なシナリオのようですが、これに関連する回答を書くほとんどの人は、すべてのコンポーネントでサービスを呼び出すと言っています。これは、すべてのページの読み込みでAPIエンドポイントの呼び出しが開始されることを意味しますか?このデータをセッションまたはクッキーに保存できますか?

ありがとうございます!

+0

有効なユーザーオブジェクトを手動で生成し、それをクッキーに保存すると、他の誰かのふりをすることができますか? – Nope

+0

私の知る限りでは、あなたのヘッダーコンポーネント(例えば、navbar)は一度しかロードされないコアモジュールの一部でなければならず、現在ログインしているユーザーを取得するためのサービスコールが含まれています。そう。アプリが読み込まれたときに現在ログインしているユーザーを取得するためのAPI呼び出しは1つだけです。私のコメントが理にかなっているかどうか教えてください。 – mrsan22

+0

@Fran潜在的にはい、誰かが誰かを模倣するためにクッキーを操作することができます(かなり簡単に)、私はそれをはっきりと操ることを好むでしょう。良いことは、私が(仮説的に)保存するクッキー情報は、名前と役割の表示以外の価値がないということです。実際のデータは保護されたAPIのエンドポイントから得られます。ヘッダーは一般的なユーザー情報を表示するだけで、アプリ全体にいかなる形でも転記されません –

答えて

0

ユーザーが保持するサービスを構築できます。私はここに例があります:あなたのための

import { Injectable } from '@angular/core'; 

import { IUser } from './user'; 
import { MessageService } from '../messages/message.service'; 

@Injectable() 
export class AuthService { 
    currentUser: IUser; 
    redirectUrl: string; 

    constructor(private messageService: MessageService) { } 

    isLoggedIn(): boolean { 
     return !!this.currentUser; 
    } 

    login(userName: string, password: string): void { 
     if (!userName || !password) { 
      this.messageService.addMessage('Please enter your userName and password'); 
      return; 
     } 
     if (userName === 'admin') { 
      this.currentUser = { 
       id: 1, 
       userName: userName, 
       isAdmin: true 
      }; 
      this.messageService.addMessage('Admin login'); 
      return; 
     } 
     this.currentUser = { 
      id: 2, 
      userName: userName, 
      isAdmin: false 
     }; 
     this.messageService.addMessage(`User: ${this.currentUser.userName} logged in`); 
    } 

    logout(): void { 
     this.currentUser = null; 
    } 
} 

重要な部分は「CurrentUserに」プロパティです:https://github.com/DeborahK/Angular-Routing

ここでの一枚です。

注:これはサンプルアプリケーションなので、ユーザー情報はハードコードされています。実際のデータを取得する必要があります。

+0

優れています。私はこのオプションを試してみます。代わりに、私は私のapp.tsファイル内のプロバイダとして私のサービスクラスを呼び出す、私のヘッダコンポーネントでは、コンストラクタの引数からサービスインスタンスを抽出し、ユーザーデータを取得する関数を呼び出して、単にそれらの値を表示していますヘッダーのHTMLにそれは動作しますが、それが正しい方法であるかどうかは分かりません。 –

関連する問題