Laravel 5.2通过API进行身份验证

Vij*_*dey 5 php authentication laravel laravel-5 laravel-5.2

我正在使用Laravel 5.2开发RESTful API.在位于\Illuminate\Auth\TokenGuard\TokenGuard.php第46行的令牌防护中,令牌的列名定义为api_token:

$this->storageKey = 'api_token';
Run Code Online (Sandbox Code Playgroud)

我想将此列名更改为其他名称,例如api_key.

我怎样才能做到这一点?我不想修改核心TokenGuard.php文件.

pat*_*cus 16

内置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';
    }
}
Run Code Online (Sandbox Code Playgroud)

一旦你创建了你的课程,你需要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']);
    });
}
Run Code Online (Sandbox Code Playgroud)

最后,你需要告诉你Auth使用你的新mytoken卫士.这是在config/auth.php配置文件中完成的.

'guards' => [
    'api' => [
        'driver' => 'mytoken',
        'provider' => 'users',
    ],
],
Run Code Online (Sandbox Code Playgroud)