Встроенный 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