0

我更新角2;我有一个应用程序,我想在我的应用程序中的每个页面的头部组件中显示当前登录的用户名和分配的角色。我有:显示登录每页上的名称和角色角2

  • 用户模式(与显示必要的字段,如用户名,角色的用户界面,而这个人的名字)
  • 用户服务(服务类调用REST终点获得从我们的认证系统的数据

我可以很容易地从日志中的用户信息,它给人的印象是有效的JSON,但我怎么每一页(组件),而不必在叫我的服务显示它每一个组件?理想情况下,在登录页面之后,头文件或起始组件将加载用户对象并将其注入或传递给所有后续组件nts,所以用户对象被存储(因为没有更好的词)从组件到组件,所以在应用程序加载时只需要1次http调用。

本质上,我正在寻找最好的,最流线的方法来做到这一点。这似乎是一种常见的情况,但大多数我阅读过的人写出与此有关的答案,以在每个组件中调用该服务。那意味着每个页面加载都会启动API端点调用?我们可以将这些数据存储在session或cookie中吗?

谢谢!

+0

如果我手动生成一个有效的用户对象并将它存储在cookie中,我可以假装是别人? – Nope

+0

据我了解,你的头部组件(例如,导航栏)应该是一些只能加载一次的核心模块的一部分,它将包含一个服务调用来获取当前登录的用户。所以。当应用程序加载时,只会有一个api调用来获取当前登录的用户。让我知道我的评论是否有意义。 – mrsan22

+0

@Fran,可能是的,有人可以操纵cookie来模仿其他人(很容易),我宁愿避开它。好消息是,除了角色的名称和显示之外,我将存储的任何Cookie信息(假设的)都是无价值的,真正的数据来自安全的API端点。标题仅显示常见的用户信息,并且不会以任何方式跨越应用程序 –

回答

0

您可以构建一项服务来保存您的用户。我这里有一个例子:https://github.com/DeborahK/Angular-Routing

这里有一个片断它:

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; 
    } 
} 

的关键部分对你来说是“当前用户”属性。

注意:这是一个示例应用程序,所以用户信息是硬编码的。您需要检索实际数据。

+0

优秀。我会尝试这个选项。或者,我在我的app.ts文件中将我的服务类作为提供程序调用,在我的头文件组件中,我从构造函数参数中提取服务实例并调用获取用户数据的函数,然后仅显示这些值在标题的HTML中。它的工作原理,但不知道它是否是正确的方法。 –