angular - 登录restangular后如何设置令牌?
问题描述
登录restangular后如何在标头中设置身份验证令牌?这是我的登录代码和应用程序模块声明。
this.authService
.authenticate(this.login)
.then(res => {
if (res.data) {
localStorage.setItem("currentUser", JSON.stringify(res.data));
// Restangular.setDefaultRequestParams({ authentication: res.data.token });
// set heder token here
this.router.navigate(["member/home"]);
} else {
console.log("not found");
}
})
.catch(err => {
console.log(err);
});
app.module.ts
RestangularProvider.setBaseUrl(environment.apiUrl);
let currentUser = JSON.parse(localStorage.getItem("currentUser"));
if (currentUser) {
RestangularProvider.setDefaultHeaders({
Authorization: currentUser.token
});
}
解决方案
您可以使用拦截器模式来实现这一点:
首先,创建一个新服务:
import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class JwtInterceptor implements HttpInterceptor {
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let currentUser = JSON.parse(localStorage.getItem('currentUser'));
if (currentUser && currentUser.token) {
request = request.clone({
setHeaders: {
Authorization: `Bearer ${currentUser.token}`
}
});
}
return next.handle(request);
}
}
更新 app.module.ts :
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
providers: [
{ provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },
]
推荐阅读
- flutter - 即使我指定“宽度”和“高度”,容器也会填满屏幕
- r - 如何在 R 中运行演示?
- apache-flink - Flink,RocksDBStateBackend 中的 setDbStoragePath 方法是做什么的?
- c# - 不显示布局页面,在除索引之外的其他视图中工作。C# ASP.NET 核心
- flutter - 有没有办法检查特定的颤振插件是否适用于特定的 Android/IOS 操作版本?
- c# - 在控制器动作中接收参数
- flutter - 如果数据不可用,则颤振在文本小部件上应用条件
- python-3.x - `FileNotFoundError: No such file: '/content/Weeds_Detectiontrain/1.png'` 如何写入正确的目录
- azure - 使用 Azure 服务总线 API 管理队列的授权失败
- spring-boot - 验证前端发送的令牌