【问题标题】:Angular 5 JWT always says 'invalid token'Angular 5 JWT 总是说“无效令牌”
【发布时间】:2019-05-09 01:05:40
【问题描述】:

我制作了一个通用拦截器,用于在每个请求的标头中插入授权令牌。令牌从 Spring Boot 后端正确保存到会话存储中。相同的令牌在 Postman 中有效,但在 Angular 服务中失败(从 Spring Boot 调用 REST API 时)。在浏览器控制台中显示HTTP 500 invalid token 任何帮助将不胜感激。

JwtInterceptor.ts

import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';

@Injectable()
export class JwtInterceptor {

    constructor() {}

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        // add authorization header with jwt token if available
        // tslint:disable-next-line:prefer-const
        const token = sessionStorage.getItem('token');
        if (token) {
            request = request.clone({
                headers: request.headers.set('Authorization', 'Bearer ' + token)
            });
        }
        return next.handle(request);
    }

}

【问题讨论】:

  • 您不需要将令牌与不记名连接起来。 headers: request.headers.set('Authorization', token)
  • 检查标题部分浏览器网络选项卡。是否需要一个或者您传递了错误的格式或令牌。
  • @mxr7350 实际上,根据 oauth2 的规范,您必须在令牌前加上方案。否则你实现错了。
  • 在浏览器中它以 Authorization: Bearer "eyJhbGciOiJIUzI1NiJ9.ey...J9.X4QO4XEk6qQkZ8GiqPPnmVweDNqsVmQfPu-5oSyG7s0" 的形式出现,但在 Postman 中它以 Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.ey...J9.X4QO4XEk6qQkZ8GiqPPnmVweDNqsVmQfPu-5oSyG7s0 的形式出现。我认为浏览器将其视为字符串还是什么?应该有问题吗?
  • @TweaknFreak 您有两种选择:阻止将引号添加到存储中,或在检索令牌后删除引号。

标签: angular jwt


【解决方案1】:

令牌可能已过期 这就是我在我的代码中所做的

    const myHeaders = new Headers();
    myHeaders.append("Content-Type", "application/json");
    myHeaders.append("Authorization",localStorage.getItem("token") ); 

【讨论】:

  • 这似乎不起作用。无论如何,如果令牌已过期,那么它会在后端抛出该异常,但事实并非如此。我还设置了 2 小时的到期时间,所以这应该不是什么大问题。
猜你喜欢
  • 1970-01-01
  • 2021-04-13
  • 2021-09-25
  • 2019-03-19
  • 1970-01-01
  • 2017-09-27
  • 2018-07-14
  • 2020-04-19
  • 2016-10-20
相关资源
最近更新 更多