ユーザ用ツール

サイト用ツール


サイドバー



最近の更新



Tag Cloud

タグ数量
9
10
1
3
1
2
17
7
1
1
4
13
4
1
2
309
1
9
2
7
21
5
1
31
3
3
1
6
1
1
46
1
3
3
1
1
1
1
1
1
33
46
7
9
10
8
10
3
21
2
9
2
2
6
9
1
1
6
12
4
3
3
2
1
8
2
4
1
6
30
2
12
5
3
1
1
2
3
2
1
3
4
3
3
4
2
2
1
1
2
1
2
1
2
1
27
2
1
3
2
2
1
1
2
3
17
5
9
1
1
2
16
2
6
1
2
12
1
3
1
1
4
11
1
6
4
2
7
1
3
3
13
1
4
1
1
10
3
1
17
3
1
5
1
2
1
1
2
9
2
2
3
2
1
3
1
3
1
2
2
2
1
2
6
1
4
3
5
1
3
1
3
3
2
1
1
30
1
3
3
1
1
1
5
5
1
36
2
4
2
1
2
2
3
1
1
1
4
1
2
1
3
1
1
1
2
5
2
5
2
1
1
1
5
3
2
4
4
1
2
2
25
1
1
3
4
1
1
2
1
1
2
1
1
1
1
2
1
1
1
1
1
19
7
1
5
1
1
3
1
2
1
1
2
1
1
1
1
1
1
2
1
1
2
1
1
1
1
1
1
1
4
2
1
1
2
2
2
1
1
2
1
1
12
1
1
1
1
1
1
1
1
1
1
1
1
1
11_php:02_framework:01_laravel:43_api_token

43 Laravel APIトークン名(api_token)を変更

LaravelでAPIを作成するときに、デフォルトトークン名は、「api_token」です。

Voyagerを利用してて、この環境だとUsersのトークンカラムが「remember_token」になっていた。
そのため、remember_tokenに変更する手順をメモ

Voyager 1.2
Laravel 5.8

デフォルトのトークン名

デフォルトのトークン名が記述されている場所は下記です。

vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php:            $config['input_key'] ?? 'api_token',
vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php:            $config['storage_key'] ?? 'api_token',
vendor/laravel/framework/src/Illuminate/Auth/TokenGuard.php:        $inputKey = 'api_token',
vendor/laravel/framework/src/Illuminate/Auth/TokenGuard.php:        $storageKey = 'api_token',

カスタムガード作成

app/Services/Auth/MyTokenGuard.php

<?php
namespace App\Services\Auth;

use Illuminate\Auth\TokenGuard;
use Illuminate\Contracts\Auth\UserProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Log;

class MyTokenGuard extends TokenGuard {

    /**
     * Create a new authentication guard.
     *
     * @param  \Illuminate\Contracts\Auth\UserProvider  $provider
     * @param  \Illuminate\Http\Request  $request
     * @return void
     */
    public function __construct(UserProvider $provider, Request $request)
    {
        // 「api_token」から「api_key」にキーを変更する.
        // inputKey(1つ目のapi_key)が、GET/POSTパラメータから取得するキー.
        // storageKey(2つ目のapi_key)が、DBのカラム名.
        parent::__construct($provider, $request, 'remember_token', 'remember_token');
    }
}

カスタムガードをアプリに登録

app/Providers/AuthServiceProvider.php

<?php

namespace App\Providers;

use App\Services\Auth\MyTokenGuard;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Auth;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        // 'App\Model' => 'App\Policies\ModelPolicy',
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        $this->app['auth']->extend('remember_token', function($app, $name, array $config) {
            return new MyTokenGuard(Auth::createUserProvider($config['provider']), $app['request']);
        });
        //
    }
}

app/config/auth.php

あとは設定のdriverを修正してあげるだけ

app/config/auth.php

    'guards' => [

        'api' => [
            'driver' => 'remember_token',
            'provider' => 'users',
            'hash' => false,
        ],
11_php/02_framework/01_laravel/43_api_token.txt · 最終更新: 2020/01/17 22:22 by matsui

Yesterday:894 Today:002 Total:237509