2017-01-06 10 views
2

クライアントがAuthorization=Bearer <access_token>を送信する通常のエンドポイントでは、'middleware' => 'auth:api'を使用して認証が正常に機能します。ヘッダーの代わりにクエリ文字列にアクセストークンを持つLaravel Passportを使用してリクエストを認証するにはどうすればよいですか?

しかし、ここでは、承認ヘッダーなしで、次のようなクエリ文字列にアクセストークンを持つプレーンなイメージダウンロード要求を処理したいと考えています。GET /picture/my_picture.png?access_token=1234

私は私のミドルウェアでは、このような何かを試してみましたが、私はリクエストにヘッダを追加するように見えることはできません。

if ($request->has('access_token')) { 
    // something like $request->header->set('Authorization', 'Bearer ' . $request->get('access_token')); 
} 

if ($this->auth->guard($guard)->guest()) { 
    // throw exception 
} 

はこれを行うことができますか?たぶん傍受したり上書きしたりするかもしれませんか?

答えて

0

私はあなたの アプリで同様の問題があった \のHttp Kernal.php

\

登録あなたの $ミドルウェアミドルウェアと $ routeMiddleware

<?php 

namespace App\Http; 

use Illuminate\Foundation\Http\Kernel as HttpKernel; 

class Kernel extends HttpKernel 
{ 
    /** 
    * The application's global HTTP middleware stack. 
    * 
    * These middleware are run during every request to your application. 
    * 
    * @var array 
    */ 
    protected $middleware = [ 
     \App\Http\Middleware\AddHeaderAccessToken::class, 

     \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, 
     \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, 
     \App\Http\Middleware\TrimStrings::class, 
     \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, 
    ]; 

    /** 
    * The application's route middleware groups. 
    * 
    * @var array 
    */ 
    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 = [ 
     'addAccessToken' => \App\Http\Middleware\AddHeaderAccessToken::class, 
     '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, 

     'scopes' => \Laravel\Passport\Http\Middleware\CheckScopes::class, 
     'scope' => \Laravel\Passport\Http\Middleware\CheckForAnyScope::class 
    ]; 
} 

ミドルウェア

<?php 

namespace App\Http\Middleware; 

use Closure; 

class AddHeaderAccessToken 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if ($request->has('access_token')) { 
     $request->headers->set('Authorization', 'Bearer ' . $request->get('access_token')); 
     } 
     return $next($request); 
    } 
} 
関連する問題