如何保留登录令牌以便其他组件可以使用它?

时间:2017-12-04 03:38:12

标签: angular

假设我发帖子请求创建我的令牌。

public tokenInfo: TokenInfo;

public login(creds){
   return this.http.post<TokenInfo>(this.baseUrl + "Account/CreateToken", creds)
          .map(res =>{
                this.tokenInfo = res;  
                return true;                      
          })
  }

我收回了我的令牌和到期日期。类似的东西:

{token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ...", expiration: "2017-12-04T03:40:55Z"}

如何保留它以便其他组件可以利用它?首先想到的是菜单栏左下角的display the name of the logged user并隐藏Login项。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您可以将令牌保存在网络存储空间中,如下所示:

window.localStorage.setItem('token', res.token);

你可以像以后一样得到它:

window.localStorage.getItem('token');

答案 1 :(得分:1)

我会为此目的使用服务:

@Injectable()
export class AuthService {
  authToken: TokenInfo;

  public login(creds) {
    // You could store the auth token in local storage here instead.
    return this.http.post('/login').subscribe((res) => this.authToken = res);
  }

  public getAuthToken() {
    return this.authToken;
  }
}

export class YourComponent {
  constructor(private authService: AuthService) { }

  login() { 
    this.authService.login({ /* Your credentials. */ });
  }

  displayToken() {
     alert(this.authService.getAuthToken());
  }
}