2017-02-08 3 views
2

현재 Angular 및 Laravel과 함께 토큰 기반 인증을 사용하는 응용 프로그램을 작성 중입니다. 처음에는 BookController을 작성하여 API를 테스트하기 위해 작업을 시작했습니다. 처음에는 Angular에서이 데이터를 호출하려고 할 때 Cross Origin Request Block 오류가 발생했습니다. 그러나 나는 헤더를 내 routes/web.php 파일에 추가하여이를 해결했다. 여기에 전체 파일이 있습니다. NB : 나는 현재 토큰을 기반 인증을 설정하려면이 자습서를 다음입니다 그러나 다른 도메인Laravel 5.4/교차 출처 요청으로 인한 각도 조정 가능 처리 오류가 발생했습니다.

<?php 


header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Headers: Authorization, Content-Type'); 

//Route::get('/', '[email protected]'); 

//Route::resource('book/create', '[email protected]'); 

Auth::routes(); 

Route::get('/', '[email protected]'); 

Route::resource('book', 'BookController'); 

Route::resource('authenticate', 'AuthenticateController', ['only' => ['index']]); 

Route::post('authenticate', '[email protected]'); 

에서조차 API를 사용하여 성공적으로 할 수 있었다 이러한 헤더를 추가 한 후. https://scotch.io/tutorials/token-based-authentication-for-angularjs-and-laravel-apps

요약하면, 내 문제는 사용자 이름과 비밀번호가 포함 된 양식을 제출할 때 다음과 같은 오류가 발생합니다. 아래에서는 좀 더 정교하게 노력할 것입니다.하지만 그곳에 많이 있기 때문에 꽤 어렵습니다.

크로스 원산지 요청 차단 : 동일한 기원 정책 http://www.example.local/authenticate/에서 원격 자원을 읽어 허용하지 않습니다. (이유 : CORS 헤더 'Access-Control-Allow-Origin'이 누락되었습니다.)

그리고

가능하게되지 않은 거절 : { "데이터"널 "상태"- 1 "구성"{ "방법": "POST", "transformRequest": "null", "transformResponse": [null], "jsonpCallbackParam": "콜백", "url": "http://www.example.local/authenticate/", "data": { "이메일": "[email protected]", "password": "fsdfd "}", "withCredentials": false, "headers": { "Accept": "application/json, text/plain, /", "Content-Type": "application/json; charset = utf-8 "}},"statusText ":" "}

각도 UI 라우터 V 0.4.2 및 satellizer을 사용하고 있습니다. 나의 Angular 버전은 API와 다른 도메인을 사용하는 1.6.2 버전입니다. 위의 작업 예제와 매우 비슷합니다.

laravel 측에서도이 튜토리얼을 따라 미들웨어를 추가하여이 문제를 해결하려고했지만 행운은 없습니다.

http://en.vedovelli.com.br/2015/web-development/Laravel-5-1-enable-CORS/

나는 또한 내 AuthenticateController.php 파일을 포함합니다 ..

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 
use JWTAuth; 
use Tymon\JWTAuth\Exceptions\JWTException; 
use App\User; 


class AuthenticateController extends Controller 
{ 

    public function __construct() 
    { 
     // Apply the jwt.auth middleware to all methods in this controller 
     // except for the authenticate method. We don't want to prevent 
     // the user from retrieving their token if they don't already have it 
     $this->middleware('jwt.auth', ['except' => ['authenticate']]); 
     $this->middleware('cors'); 

    } 

    public function index() 
    { 

     // Retrieve all the users in the database and return them 
     $users = User::all(); 
     return $users; 
    } 

    public function authenticate(Request $request) 
    { 
     $credentials = $request->only('email', 'password'); 

     try { 
      // verify the credentials and create a token for the user 
      if (! $token = JWTAuth::attempt($credentials)) { 
       return response()->json(['error' => 'invalid_credentials'], 401); 
      } 
     } catch (JWTException $e) { 
      // something went wrong 
      return response()->json(['error' => 'could_not_create_token'], 500); 
     } 

     // if no errors are encountered we can return a JWT 
     return response()->json(compact('token')); 
    } 
} 

내 문제는 "가능하면 처리되지 않은 거부"가 "크로스 원산지 관련이 있는지 나는 알지도 못하는입니다 요청 차단됨 "오류입니다. 그러나 나는 그것이 있다고 추정해야한다.

내 경로 파일에서 다른 경로를 허용 할 수있는 항목을 인식 할 수 있습니까?

편집 :

I 한 요청의 차이를 발견하고 또 다른 요청이 OPTIONS 중에 하나가 GET 요구 때문이다. 이것이 원인 일 수 있습니다.

이후 나는 아파치와 버추얼 호스트의 가상 호스트 설정 파일에 모두 Header set Access-Control-Allow-Origin "*"을 추가했다.htaccess 파일을 Laravel 프로젝트의 루트에 저장합니다. 아직도 변화 없음. 내가 궁금

는 각도

+0

http://stackoverflow.com/questions/34748981/laravel-5-2-cors-with-preflight-options/35556406#35556406 및 http://stackoverflow.com/questions/16960419/angularjs-and-laravel-crossdomain-cors-xhr-requests-lacking-remember-cook/17429795 # 17429795 관련성이 있습니다. – sideshowbarker

답변

1

귀하의 서버 코드에서이 관련 일 처리해야한다는 Access-Control-Allow-Methods: GET, POST, PUT, DELETE 헤더와 Access-Control-Allow-Headers: Authorization, Content-Type 헤더를 포함 그것에 헤더 전용 응답을 전송하여 OPTIONS 요청.

또는이 모든 것을 더 쉽게 해주는 https://github.com/barryvdh/laravel-cors을 사용해보세요.

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests에는 읽고 싶은 정보가 있습니다.