현재 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 프로젝트의 루트에 저장합니다. 아직도 변화 없음. 내가 궁금
는 각도
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