Laravel Passport - разрешить либо auth: api, либо client_creds в группе маршрутов - PullRequest
0 голосов
/ 13 июня 2018

Я бы хотел, чтобы группа маршрутов была доступна либо с помощью стандартного промежуточного программного обеспечения auth:api, либо с помощью промежуточного программного обеспечения CheckClientCredentials.

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

Существует ли промежуточное программное обеспечение Passport, которое допускает любой тип аутентификации API, о котором я не знаю?

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

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Я воспользовался советом Джошуаса по поводу аналогичного ответа здесь и создал новое промежуточное ПО, включающее два промежуточных ПО аутентификации.

Рабочий класс Middleware для всех, кто затронул эту проблему ниже.Сначала он попробует промежуточное программное обеспечение Auth Guard, а если не удастся аутентифицировать запрос, то попытается выполнить аутентификацию с использованием промежуточного программного обеспечения Client Credentials Passport.

namespace App\Http\Middleware;

use Closure;
use Illuminate\Auth\AuthenticationException;
use Illuminate\Auth\Middleware\Authenticate as AuthGuardMiddleware;
use Laravel\Passport\Http\Middleware\CheckClientCredentials as ClientCredMiddleware;


class AuthenticateWithApiOrClientCreds
{

    /**
    * Authenticate a request with either Authenticate OR CheckClientCredentials Middleware
    *
    * @param $request
    * @param Closure $next
    * @param  mixed  ...$scopes
    * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
    */
    public function handle($request, Closure $next, ...$scopes)
    {
        $auth_guard_middleware  = app()->make(AuthGuardMiddleware::class);

        try {
            $response = $auth_guard_middleware->handle($request, $next, 'api');

        } catch (AuthenticationException $e) {
            $client_cred_middleware = app()->make(ClientCredMiddleware::class);
            $response = $client_cred_middleware->handle($request, $next, ...$scopes);
        }

        return $response;
    }
}
0 голосов
/ 13 июня 2018

Laravel не предоставляет промежуточное программное обеспечение ИЛИ .Хотя есть несколько обходных путей, как это было задано ранее здесь .

Если вы ищете способ изменить промежуточное программное обеспечение api.php по умолчанию (по умолчанию auth:api), вы можете увидетьв каталоге: app\Providers\RouteServiceProvider.php с именем функции: mapApiRoutes().

...