【问题标题】:Angular 7.1.3 : post not work with Authorization Bearer tokenAngular 7.1.3:发布不适用于授权持有者令牌
【发布时间】:2019-01-08 07:30:19
【问题描述】:

我是 Angular 新手,我正在使用 Angular 7.1.3 我通过 Angular HTTP 成功登录到我的 Laravel 5.7 Passport API 系统并获取访问令牌并存储在 cookie 中。

现在我想简单地使用访问令牌获取数据,但我无法获取数据,它给出了 302 重定向错误:

我的 auth.service.ts 代码是:

import { Injectable } from '@angular/core';
import {HttpClient, HttpHeaders} from "@angular/common/http";
import { GlobalvarsService } from "./globalvars.service";
import { Cookie } from 'ng2-cookies/ng2-cookies';
import {Router} from '@angular/router';

@Injectable({
  providedIn: 'root'
})
export class AuthService {

  constructor(private http : HttpClient, private globvar : GlobalvarsService, private router : Router) { }

details(){

      const httpOptions = {
          headers: new HttpHeaders({
              'Content':'application/json',
              'Content-Type':  'application/x-www-form-urlencoded',
              'Authorization' : 'Bearer '+  Cookie.get('access_token')
          }),
      };

      let input = new FormData();
      this.http.get(mypath + 'api/details',httpOptions).subscribe(
          data => {
              console.log('dddddddd');
                console.log(data);

          },
          error => {
          }
      )
  }

注意:mypath 是我的网址

我的代码有什么问题?发送请求时没有设置POST方法它设置OPTIONS

【问题讨论】:

  • 了解 CORS 和预检
  • 我对 POSTMEN 及其作品进行了同样的测试
  • 另外,我看不到POST,这里只有GET

标签: angular angular7


【解决方案1】:

这称为预检请求,由于跨域资源共享(简称 CORS)策略而由浏览器强制执行。您无法直接控制它。

向服务器发出预检请求以“询问”是否可以执行所需的请求。当您尝试提出的请求被认为“不简单”时,它就完成了。这意味着你可以看到https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests

所以在某些情况下这是预期的行为。如果您向应用程序所在的同一域发出请求,则不会进行预检。如果您对外国资源提出非简单请求,则适用 CORS 并会询问“问题”。从应用程序的角度来看,如果您不想要预检,您只能将请求更改为简单。

到基地,那段代码有什么臭味:

  1. 您在GET 请求上设置了Content-Type。为什么? GET 没有内容,所以没有类型
  2. Content 标头可能被认为是自定义的,这会导致预检发生。我只假设您希望 Accept 标头表明您希望响应为 json
  3. 如果您在 cookie 中有您的身份验证令牌,为什么要使用标头发送它?您最终会得到两次具有相同数据的请求 - 在 cookie 和标头中。
  4. 通常将授权数据附加到请求是使用 http 拦截器完成的,因此它对每个请求都完成,而无需手动将这些数据添加到每个请求(就像您尝试做的那样)https://angular.io/guide/http#intercepting-requests-and-responses

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-22
    • 2022-11-18
    • 2018-09-22
    • 2020-07-30
    • 2018-07-26
    • 1970-01-01
    • 2019-05-28
    • 2019-12-21
    相关资源
    最近更新 更多