ユーザ用ツール

サイト用ツール


11_php:02_framework:01_laravel:43_api_token
no way to compare when less than two revisions

差分

このページの2つのバージョン間の差分を表示します。


11_php:02_framework:01_laravel:43_api_token [2020/01/17 13:22] (現在) – 作成 matsui
行 1: 行 1:
 +====== 43 Laravel APIトークン名(api_token)を変更 ======
  
 +LaravelでAPIを作成するときに、デフォルトトークン名は、「api_token」です。
 +
 +Voyagerを利用してて、この環境だとUsersのトークンカラムが「remember_token」になっていた。
 +そのため、remember_tokenに変更する手順をメモ
 +
 +Voyager 1.2
 +Laravel 5.8
 +
 +
 +===== デフォルトのトークン名 =====
 +
 +デフォルトのトークン名が記述されている場所は下記です。
 +<code>
 +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',
 +</code>
 +
 +===== カスタムガード作成 =====
 +<code|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');
 +    }
 +}
 +</code>
 +
 +
 +===== カスタムガードをアプリに登録 =====
 +
 +<code|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']);
 +        });
 +        //
 +    }
 +}
 +</code>
 +
 +===== app/config/auth.php =====
 +
 +あとは設定のdriverを修正してあげるだけ
 +
 +<code|app/config/auth.php>
 +    'guards' => [
 +
 +        'api' => [
 +            'driver' => 'remember_token',
 +            'provider' => 'users',
 +            'hash' => false,
 +        ],
 +</code>
 +{{tag>Laravel}}
11_php/02_framework/01_laravel/43_api_token.txt · 最終更新: 2020/01/17 13:22 by matsui