Laravel 5.1を使用してRESTful APIを開発しています。私のエンドポイントはPostmanで正しく機能しています。しかし、フロントエンドと統合すると、エラーが発生しています。laravel 5.1 restFull APIのアクセス制御元
XMLHttpRequestが http://ideahubapi.dev/api/v1/users/registerをロードすることはできません。
要求された リソースに「Access-Control-Allow-Origin」ヘッダーが存在しません。
発信元 'http://ideahubfront.dev'はアクセスできません。
応答はHTTPステータスコード500でした。
私は以下の方法を試しました。
(1)コアミドルウェアを作成しました。
<?php
namespace App\Http\Middleware;
use Closure;
class Cors
{
public function handle($request, Closure $next)
{
return $next($request)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With');
}
}
はkernal.php
<?php
namespace App\Http;
use Illuminate\Foundation\Http\Kernel as HttpKernel;
class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* @var array
*/
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\App\Http\Middleware\VerifyCsrfToken::class,
\App\Http\Middleware\Cors::class,
];
/**
* The application's route middleware.
*
* @var array
*/
protected $routeMiddleware = [
'web' => \App\Http\Middleware\VerifyCsrfToken::class,
'cors' => \App\Http\Middleware\Cors::class,
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];
}
とroutes.phpのオプション要求が働いていた。その後
Route::group(['middleware' => ['web', 'core'], 'prefix' => 'api/v1'], function(){
// get single user by user id
Route::get('getuserbyid/{user_id}', '[email protected]');
Route::post('users/register', '[email protected]');
});
ににこれを追加しました。しかし依頼は依然として同じです。
(2)コントローラーに手動で戻るヘッダーを追加しました。このような。
return response()->json([$user, $merchant], 200)
->header('Access-Control-Allow-Origin', '*')
->header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS')
->header('Access-Control-Allow-Headers', 'Cache-Control, Connection, Date, Server, Content-Type, User-Agent, Accept, Referer, Authorization,Origin, Accept-Encoding, Content-Length, Host, Connection, X-Requested-With');
いいえ運がありません。みんな私を助けてください。私はこれで死んでいる。私のクライアントは登録を見たいと思っています。私はこれに固執しています。
Route::group(['middleware' => ['web', 'cors']
へ
ミドルウェアはroutes.php' 'で指定したカーネルと同じでなければなりません。この変更[''middleware' => ['web'、 'cors'] ' – xmhafiz
ありがとうございます。以前気付かなかった –