Проверка подлинности токена на предъявителя Laravel - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу сделать аутентификацию для запросов API, поступающих от мобильных пользователей.

Я следовал этому и сделал api_key столбец внутри users таблицы.

IТакже создано промежуточное программное обеспечение:

public function handle($request, Closure $next)
{
  $token = $request->bearerToken();
  return $next($token);
}

Мне нужно получить токен bearer из header и сравнить его с таблицей пользователей.

Как этого добиться?

Ответы [ 2 ]

1 голос
/ 06 ноября 2019

Я бы порекомендовал laravel/passport, так как это намного безопаснее и проще. Нажмите здесь.

0 голосов
/ 06 ноября 2019

Это не то, как должна работать аутентификация API, просто добавьте промежуточное ПО auth:api к любому маршруту или группе маршрутов, и проверка токенов на предъявителя произойдет автоматически без специального промежуточного ПО

Route::get('url', 'controller@method')->middleware('auth:api');

Но дляответьте на вопрос, вот что вы можете сделать (все еще не рекомендуется, но работает)

<?php

namespace App\Http\Middleware;

use Closure;

class ApiAuthentication
{
    public function handle($request, Closure $next)
    {
        $token = $request->bearerToken();
        $user = \App\User::where('api_token', $token)->first();
        if ($user) {
            auth()->login($user);
            return $next($request);
        }
        return response([
            'message' => 'Unauthenticated'
        ], 403);
    }
}

Зарегистрируйте промежуточное ПО в App\Http\Kernel

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    // Here for example
    'custom_auth' => \App\Http\Middleware\ApiAuthentication::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];

И защитите маршрут с этим именем промежуточного ПО

Route::get('/', function () {
    // Return authenticated user model object serialized to json
    return auth()->user();
})->middleware('custom_auth');

Результат

enter image description here

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...