在重新登录后如何设置令牌?

时间:2019-07-02 10:40:50

标签: angular 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
    });
  }

1 个答案:

答案 0 :(得分:1)

您可以使用拦截器模式来实现:

首先,创建一个新服务:

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 },
    ]