2017-09-26 16 views
1

Laravel 5.5アプリケーション(Passportを使用していません)があり、在庫インフラストラクチャを使用して構築したVueJSコンポーネントから/apiルートにアクセスしようとしています。使用するvue-resource有効な認証済みの応答を取得できません。Laravel基本認証:api 401 Unauthorized

enter image description here

マイVueJS:routes/api.php

methods: { 
     updateSubscription(newChannelId, oldChannelId) { 
      if (oldChannelId < 1 && newChannelId > 0) { 
       console.log('new subscription', this); 
       this.$http.post('/api/subscribe', { 
        'game_id': this.gameId, 
        'channel_id': newChannelId 
       }).then(response => { 
        // success 
       }, response => { 
        console.error('Failed to subscribe'); 
       }); 

マイLaravelルート:

Route::middleware('auth:api')->group(function() { 
    Route::post('subscribe', '[email protected]'); 
    Route::post('unsubscribe', '[email protected]'); 
    Route::post('update-subscription', '[email protected]'); 
}); 

を私はLaravelは外のXSRFを扱っ思った私は、XSRFトークンここに渡されて見ることができますゲートと私はこの問題に遭遇しないだろう。私は何を逃した

protected $middlewareGroups = [ 
    'web' => [ 
     \App\Http\Middleware\EncryptCookies::class, 
     \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, 
     \Illuminate\Session\Middleware\StartSession::class, 
     // \Illuminate\Session\Middleware\AuthenticateSession::class, 
     \Illuminate\View\Middleware\ShareErrorsFromSession::class, 
     \App\Http\Middleware\VerifyCsrfToken::class, 
     \Illuminate\Routing\Middleware\SubstituteBindings::class, 
    ], 

    'api' => [ 
     'throttle:60,1', 
     'bindings', 
    ], 
]; 

/** 
* The application's route middleware. 
* 
* These middleware may be assigned to groups or used individually. 
* 
* @var array 
*/ 
protected $routeMiddleware = [ 
    'auth'  => \Illuminate\Auth\Middleware\Authenticate::class, 
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 
    'can'  => \Illuminate\Auth\Middleware\Authorize::class, 
    'guest'  => \App\Http\Middleware\RedirectIfAuthenticated::class, 
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 
]; 

:私は私のhttpカーネルがどのように見えることを考えるとauth:apiに精通し、100%じゃないと仮定しますか?

答えて

0

401エラーはCSRFトークンとは関係ありません。あなたのルートにauth:apiミドルウェアを追加したので、要求を認証するたびに有効なAPIトークンを渡す必要があります。私はあなたがこれをやっているのを見ることができません。

は、それが内部でどのように動作するか確認するためにTokenGuardクラスをチェックアウト:https://github.com/laravel/framework/blob/5.5/src/Illuminate/Auth/TokenGuard.php

は基本的には、各要求にapi_tokenと呼ばれるリクエストパラメータまたはAuthorizationヘッダAuthorization: Bearer <api_token>を渡す必要があります。

+0

これは意味がありますが、Laravelの船はAPIを認証する能力を持っているのですか、これを管理するために「Passport」を引き出す必要がありますか? – Webnet

+0

好きな場合は、単にあなたのテーブルに 'api_token'フィールドを追加することができます。これは、比較のためにプレーンテキストとして保存する必要があります。したがって、最も安全ではありませんが、すぐに作業することができます。 – fubar

+0

この場合、それは単なるAjaxリクエストです。私は 'auth:api'トークンを削除して、この要求をするためにユーザにログインさせるだけでよいはずです。とにかくソースコードを見ることで見えるとき、JSにトークンを置くことには意味がありません。 – Webnet

関連する問題