Open2

新たな知見

TikkaTikka

LaravelでApiToken等を使ったAPI認証の知見。

Laravelの配列や文字列などの操作をするためにlaravel/helpersをインストールします。

php artisan composer laravel/helpers

適当にテーブルを作って(Usersテーブルとか)api_tokenをカラムに追加します。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddApiTokenToUsersTable extends Migration
{
  /**
   * Run the migrations.
   *
   * @return void
   */
  public function up()
  {
    Schema::table('users', function (Blueprint $table) {

      $table->string('api_token', 80)->after('password')
        ->unique()
        ->nullable();
    });
  }

  /**
   * Reverse the migrations.
   *
   * @return void
   */
  public function down()
  {
    Schema::table('users', function (Blueprint $table) {
      $table->dropColumn('api_token');
    });

  }
}

php artisan migrateでマイグレーションして、コントローラーにauthenticatedメソッドをオーバーライドして使う処理を書いて終わり(この処理は後にスクラップとして残します)

TikkaTikka

コントローラー(今回はLoginController)にauthenticatedメソッドを書いていきます。
StrとRequestをUSEしてます。

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Str;
use Illuminate\Http\Request;

class LoginController extends Controller
{
  /*
    |--------------------------------------------------------------------------
    | Login Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles authenticating users for the application and
    | redirecting them to your home screen. The controller uses a trait
    | to conveniently provide its functionality to your applications.
    |
    */
  use AuthenticatesUsers;

  protected function authenticated(Request $request)
  {
    $token = Str::random(90);

    $request->user()->forceFill([
        'api_token' => hash('sha256', $token),
    ])->save();

    $request->user()->update(['api_token' => str_random(60)]);

    session()->put('api_token', $token);
  }

  /**
   * Create a new controller instance.
   *
   * @return void
   */
  public function __construct()
  {
    $this->middleware('guest')->except('logout');
  }
}

ログイン直後の認証ユーザーのapi_tokenをhash()でハッシュ化して保存します。
Bladeにこのapi_tokenを埋め込んでVueで使うためにSessionに入れてます。