Angular 7.1.3: пост не работает с токеном авторизации - PullRequest
0 голосов
/ 08 января 2019

Я новичок в Angular, и я использую Angular 7.1.3 Я успешно вошел в систему Laravel 5.7 Passport API по Angular HTTP и получил токен доступа и сохранил их в файлах 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 - это мой URL

что не так с моим кодом? не установлен POST метод, который он установил OPTIONS при отправке запроса.

1 Ответ

0 голосов
/ 08 января 2019

Это называется предварительным запросом и выполняется браузером из-за краткой политики Cross Origin Resource Sharing - CORS. У вас нет прямого контроля над ним.

Предварительный запрос отправляется на сервер, чтобы «спросить», можно ли выполнить требуемый запрос. Это делается, когда запрос, который вы пытаетесь сделать, считается "не простым". Что это значит, вы можете увидеть https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests

Так что это ожидаемое поведение при некоторых обстоятельствах. Если вы отправляете запросы в тот же домен, в котором находится приложение, предварительные проверки выполняться не будут. Если вы делаете непростые запросы к иностранным ресурсам, применяется CORS, и вам будет задан «вопрос». С точки зрения приложения, вы можете изменить ваши запросы, чтобы они были простыми, если вы не хотите предварительных проверок.

На базу, что воняет в этом коде:

  1. Вы установили Content-Type на запрос GET. Зачем? GET не имеет содержимого, поэтому нет типа
  2. Content, вероятно, считается ПОЛЬЗОВАТЕЛЬСКИМ, и это вызывает предпечатную проверку. Я только предполагаю, что вы хотели, чтобы заголовок Accept указывал, что вы хотите, чтобы ответ был json
  3. Если у вас есть свой токен авторизации в куки, зачем отправлять его с заголовком? В итоге вы получите запрос, который содержит одни и те же данные дважды - в файлах cookie и заголовках.
  4. Обычно прикрепление данных авторизации к запросу выполняется с помощью перехватчиков http, поэтому это делается для каждого запроса без необходимости добавления их вручную к каждому запросу (как вы пытаетесь это сделать) https://angular.io/guide/http#intercepting-requests-and-responses
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...