Laravel 5.2 Аутентификация через API

Я разрабатываю RESTful API с Laravel 5.2. В средстве защиты токенов, расположенном по адресу \Illuminate\Auth\TokenGuard\TokenGuard.php в строке 46, имя столбца для токена определяется как api_token:

$this->storageKey = 'api_token';

Я хочу изменить имя этого столбца на другое, например api_key.

Как я могу это сделать? Я не хочу изменять основной файл TokenGuard.php.


person Vijai Pandey    schedule 18.01.2016    source источник
comment
почему ты хочешь это изменить? Чего вы пытаетесь достичь   -  person Emeka Mbah    schedule 18.01.2016
comment
в моей таблице имя столбца — «api_key». Поэтому я хочу, чтобы laravel искал столбец «api_key», а не столбец «api_token» при поиске токена.   -  person Vijai Pandey    schedule 18.01.2016


Ответы (2)


Встроенный TokenGuard не имеет способа изменить поле storageKey. Поэтому вам нужно будет создать свой собственный класс Guard, который задает поле, и указать Auth использовать ваш класс Guard.

Во-первых, начните с создания нового класса Guard, расширяющего базовый класс TokenGuard. В этом примере он создается по адресу app/Services/Auth/MyTokenGuard.php:

namespace App\Services\Auth;

use Illuminate\Http\Request;
use Illuminate\Auth\TokenGuard;
use Illuminate\Contracts\Auth\UserProvider;

class MyTokenGuard extends TokenGuard
{
    public function __construct(UserProvider $provider, Request $request)
    {
        parent::__construct($provider, $request);
        $this->inputKey = 'api_key'; // if you want to rename this, as well
        $this->storageKey = 'api_key';
    }
}

После того, как вы создали свой класс, вам нужно сообщить об этом Auth. Вы можете сделать это в методе boot() вашего поставщика услуг AuthServiceProvider:

public function boot(GateContract $gate)
{
    $this->registerPolicies($gate);

    Auth::extend('mytoken', function($app, $name, array $config) {
        return new \App\Services\Auth\MyTokenGuard(Auth::createUserProvider($config['provider']), $app['request']);
    });
}

И, наконец, вам нужно сказать Auth использовать вашу новую защиту mytoken. Это делается в файле конфигурации config/auth.php.

'guards' => [
    'api' => [
        'driver' => 'mytoken',
        'provider' => 'users',
    ],
],
person patricus    schedule 18.01.2016
comment
Большое спасибо, это полезно. - person Vijai Pandey; 20.01.2016
comment
Спасибо @patricus, я новичок в этом и не мог понять, как принять. затем я применил здравый смысл и нажал на серую галочку, она стала зеленой. Спасибо за развернутый ответ, помогло. - person Vijai Pandey; 17.02.2016
comment
@patricus, как я могу определить api_token из отношения другой таблицы с пользовательскими таблицами? stackoverflow .com/questions/46319639/ - person Katerou22; 20.09.2017

К сожалению, нет возможности настроить это.

Единственный способ использовать другой ключ — создать свой собственный «Guard»: Добавление пользовательского Охранники.

Вы можете расширить класс TokenGuard и переопределить __constructor своими именами столбцов.

person Fiete    schedule 18.01.2016