【问题标题】:How to call a api with token如何使用令牌调用 api
【发布时间】:2019-05-18 22:04:49
【问题描述】:

我有将使用令牌调用的 API。

目前在 Swagger UI 中,我可以使用令牌验证此 api

例如,如果我在授权框中输入“Token 6ec8f4023d8148209749a1ed972xxxx”

见下文:

在右上角,我可以输入上面显示的令牌并进行身份验证

点击身份验证后,显示如下所示:

现在我可以通过单击执行按钮调用 swagger ui 中列出的 api,我可以看到那里列出的 json 数据。

上面的api我需要通过angular调用,我知道我可以使用angular服务的get函数,

你能证明我应该在标题中添加什么代码吗?

例如:下面没有将令牌放入标头的选项,唯一的选项是用户名和密码。我应该如何传递令牌?

getToken() {
    let headers: HttpHeaders = new HttpHeaders();
    headers = headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
    return this.http.post('http://myapi/api.php/user', {
      username: 'admin',
      password: 'password'
    }, { headers });
  }

【问题讨论】:

  • 你用什么后端?

标签: jquery angular get http-headers


【解决方案1】:

您可以使用 Angular Headers 设置值:

import {Headers} from 'angular2/http';
var headers = new Headers();
headers.append(headerName, value);

headerName你可以把token和value放在这里。然后在后端,您可以从请求标头中检索值并进行验证。

更好的方法是实现 HTTP 拦截器。创建拦截器并将其添加到您的app.module.ts。每次发出 HTTP 请求时都会附加令牌。

【讨论】:

  • 当我调用 token api 时,我得到以下响应 { "id": 356, "t": 15138632, "acl": 766, "n": "Jai New", "c" : 6, "v": "6ec8f4023d8148209749a1ed972axxxx" } 在上面的 v: "6ec8f4023d8148209749a1ed972axxxx" 是我需要放入授权标头的内容吗?
  • @SmartestVEGA 如果v 是名称,则将值放入value
【解决方案2】:

最好的方法是实现Interceptor

@Injectable()
export class TokenInterceptor implements HttpInterceptor {

  constructor(public auth: AuthService) {}

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    request = request.clone({
      setHeaders: {
        Authorization: `${this.auth.getToken()}`
      }
    });

    return next.handle(request);
  }
}

拦截器会更改您执行的每个 HTTP 请求。在这种情况下,它添加了 Authorization 标头。

不要忘记在你的 AppModule 中包含拦截器:

  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: TokenInterceptor,
      multi: true
    }
  ]

Full Example here

又脏又快的方法:

this.http.post('http://myapi/api.php/user', {
      username: 'admin',
      password: 'password'
    }, { headers: new Headers({'Authorization': token}) });

【讨论】:

  • 当我调用 token api 时,我得到以下响应 { "id": 356, "t": 15138632, "acl": 766, "n": "Jai New", "c" : 6, "v": "6ec8f4023d8148209749a1ed972axxxx" }
  • 在上面的 v: "6ec8f4023d8148209749a1ed972axxxx" 是我需要在授权标头中添加的内容吗?
  • 对我来说看起来像这样,是的,但请参阅您的后端文档
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 2013-07-22
  • 2012-09-26
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多