2016-12-02 12 views
2

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'] 

+1

ミドルウェアはroutes.php' 'で指定したカーネルと同じでなければなりません。この変更[''middleware' => ['web'、 'cors'] ' – xmhafiz

+0

ありがとうございます。以前気付かなかった –

答えて

0

変更

Route::group(['middleware' => ['web', 'core'] 

それは、カーネル内の1と一致していないので、それは動作しません。

+0

うん。私はそれを変えた。しかし運がない –

+0

私の間違いを見せていただきありがとうございます。これは1つの問題でした。主な問題はフロントエンドでした。これは役に立ちました。ありがとう。 –

関連する問題