Open2
新たな知見
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メソッドをオーバーライドして使う処理を書いて終わり(この処理は後にスクラップとして残します)
コントローラー(今回は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に入れてます。