2017-01-06 2 views
2

Аутентификация прекращается с использованием 'middleware' => 'auth:api' на обычных конечных точках, где клиент отправляет Authorization=Bearer <access_token>.Как я могу аутентифицировать запрос, используя паспорт Laravel, имеющий токен доступа в строке запроса, а не в заголовке?

Но теперь я хотел бы обрабатывать запросы загрузки изображений без заголовка авторизации, имея токен доступа в строке запроса следующим образом: 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

У меня был подобный вопрос В вашем App \ 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 
    ]; 
} 

Middleware

<?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); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^