angular - 使用 authService 登录后组件不会隐藏
问题描述
当有人登录时,我正在尝试使登录和注册链接从导航栏中消失。我正在关注 Youtube 上的教程来解决此问题,但它不起作用。
<li *ngIf="authService.loggedIn()" [routerLinkActive]="['active']" [routerLinkActiveOptions] = "{exact:true}"><a [routerLink]= "['/dashboard']">Dashboard</a> </li>
<li *ngIf="authService.loggedIn()" [routerLinkActive]="['active'] " [routerLinkActiveOptions] = "{exact:true}"><a [routerLink]= "['/profile']">Profile</a></li>
<li *ngIf="!authService.loggedIn()" [routerLinkActive]="['active']" [routerLinkActiveOptions] = "{exact:true}"><a [routerLink]= "['/login']">Login</a></li>
<li *ngIf="!authService.loggedIn()" [routerLinkActive]="['active']" [routerLinkActiveOptions] = "{exact:true}"> <a [routerLink]= "['/register']">Register</a></li>
<li *ngIf="authService.loggedIn()"><a (click)="onLogOutClick()" href="#">Logout</a></li>
此时它一直隐藏注销和配置文件,在我登录时不会出现。
Auth.service.ts 看起来像这样:
import { Http, Headers } from '@angular/http';
import { map } from 'rxjs/operators';
import { tokenNotExpired } from 'angular2-jwt';
@Injectable()
export class AuthService {
authToken: any;
user: any;
constructor(private http: Http) { }
registerUser(user){
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post('http://localhost:3000/users/register', user, {headers: headers})
.pipe(map(res => res.json()));
}
authenticateUser(user){
let headers = new Headers();
headers.append('Content-Type', 'application/json');
return this.http.post('http://localhost:3000/users/authenticate', user, {headers: headers})
.pipe(map(res => res.json()));
}
storeUserData(token, user){
localStorage.setItem('id_token', token);
localStorage.setItem('user', JSON.stringify(user));
this.authToken = token;
this.user = user;
}
loggedIn(){
return tokenNotExpired();
}
logout(){
this.authToken = null;
this.user = null;
localStorage.clear();
}
getProfile(){
let headers = new Headers();
this.loadToken();
headers.append('Authorization', this.authToken);
headers.append('Content-Type', 'application/json');
return this.http.get('http://localhost:3000/users/profile', {headers: headers})
.pipe(map(res => res.json()));
}
loadToken(){
const token = localStorage.getItem('id_token');
this.authToken = token;
}
}
解决方案
请在函数中使用token
而不是。id_token
storeUserData
查看详细的解释信息
推荐阅读
- c# - C# Entity Framework 包括具有 include() 性能糟糕的邻居表
- java - Spring Boot 中的 Maven 依赖问题
- sql - 如何在 Oracle 选择语句中声明变量
- sql-server - 在另一个查询中使用来自一个查询的参数
- php - 为什么 HTML 电子邮件只是在 php 中显示代码
- ruby - 无法在 macOS Mojave 10.14.2 中使用 RVM 安装任何 ruby 版本
- .net - 面板中的控件被隐藏,直到我调整窗口大小
- inno-setup - 使用 Inno Setup 增加日期以实施试用期
- python - Python - 将文本文件解析为 json
- express - 使用 Express 服务器后端的 Create-React-App