Laravel Middleware Auth для API

В настоящее время я разрабатываю приложение с API, доступ к которому я хочу получить через промежуточное программное обеспечение, которое будет проверять, аутентифицирован ли пользователь с помощью промежуточного программного обеспечения Laravel по умолчанию Auth и промежуточного программного обеспечения на основе токена JWT.Auth от Tymone, поэтому запросы могут быть аутентифицированы любым из способов.

Я могу придумать, как получить одно или другое, но не оба сразу, как я могу это сделать? Я думаю, мне нужно создать настраиваемое промежуточное программное обеспечение, которое использует это существующее промежуточное программное обеспечение?

Я использую Laravel 5.1

Спасибо


person rosscooper    schedule 21.01.2016    source источник


Ответы (2)


Оказалось, что мне действительно нужно было создать собственное промежуточное ПО, что оказалось проще, чем я думал:

<?php

namespace App\Http\Middleware;

use Auth;
use JWTAuth;
use Closure;

class APIMiddleware {

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next) {        
    try {
        $jwt = JWTAuth::parseToken()->authenticate();
    } catch (\Tymon\JWTAuth\Exceptions\JWTException $e) {
        $jwt = false;
    }
    if (Auth::check() || $jwt) {
        return $next($request);
    } else {
        return response('Unauthorized.', 401);
    }
}
}

Затем я использую это промежуточное ПО в моей группе маршрутов api, например, после регистрации в ядре:

Route::group(['prefix' => 'api', 'middleware' => ['api.auth']], function() {
person rosscooper    schedule 21.01.2016

Я думаю, вы можете использовать Route::group в своем файле routes.php и определить промежуточное ПО, которое вы хотите использовать в массиве.

Route::group(['middleware' => ['auth', 'someOtherMiddleware']], function()
{
    Route::get('api/somethinglist', function(){
       return App\Something::all();
    });
});

Если я не ошибаюсь, все маршруты, определенные в этой группе маршрутов, проверяются на соответствие промежуточному программному обеспечению (-ам), которое вы указываете в массиве.

person Dippner    schedule 21.01.2016
comment
Это правильно, но это будет означать, что должны пройти оба промежуточного программного обеспечения, а не одно или оба. - person rosscooper; 21.01.2016
comment
Ах, хорошо, я думал, что это то, что ты хотел, но теперь я понимаю, что тебе нужно. В любом случае, я рад, что у вас все получилось! - person Dippner; 21.01.2016