【PHP/Laravel】Laravel Fortify
Laravel Fortify
- Laravel Fortifyはバックエンド側のみの実装で、フロントエンドにはとらわれない。
- 認証機能(ログイン、ユーザー登録、パスワードのリセット、メールの検証など)の実装に必要なルート、コントローラー等が提供される。
- 勘所を掴むために、Fortifyの前にスターターキット(Laravel Breeze、Jetstream)を調べることを勧めている。スターターキットを取り入れている場合には、Fortifyをインストールする必要は無い。
- スターターキットを使用していない場合、認証機能を自前で用意するか、認証機能のバックエンド側をFortifyで用意するか、いずれかを選択する。自前で用意する場合には、 ドキュメントの認証、パスワードリセット、メール確認に従い実装する。Fortifyを選択する場合には、ドキュメントにあるように、Fortifyの認証ルート(login、logout、forgot-password、reset-password)にリクエストを送る。
インストール
# composer require laravel/fortify
# php artisan vendor:publish --provider="Laravel\Fortify\FortifyServiceProvider"
# php artisan migrate
- これによりapp/Actionsにリソースを公開、また、Fortifyの構成ファイルとマイグレーションも公開される。
- config/app.phpのproviders配列内に、App\Providers\FortifyServiceProviderクラスが登録されていることも確認する(::classについて)。
'providers' => [
//Application Service Providers
App\Providers\FortifyServiceProvider::class,
],
- FortifyServiceProviderは、タスク実行時に、公開した各Actionsを使用するように指示している。
- config/fortifyのfeatures設定配列は、Fortifyがデフォルトで公開するバックエンドルート/機能を定義している。そのため、使用する機能以外はコメントアウトすればルーティングされない。
'features' => [
//Features::registration(),//登録
Features::resetPasswords(),//パスワードリセット
Features::emailVerification(),//メール認証
//Features::updateProfileInformation(),//プロフィール
Features::updatePasswords(),//パスワードの更新
//Features::twoFactorAuthentication(),//2要素認証(2段階認証)
],
FortifyServiceProvider
FortifyServiceProviderで、Fortifyに指示を出す。
use Laravel\Fortify\Fortify;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
public function register()
{
/*
$this->app->instance(LogoutResponse::class, new class implements LogoutResponse {
public function toResponse($request)
{
return redirect('/');
}
});
*/
}
public function boot()
{
Fortify::loginView(function () {
return view('auth.login');//ユーザー認証
});
Fortify::authenticateUsing(function (Request $request) {
$user = User::where('email', $request->email)->first();
if ($user &&
Hash::check($request->password, $user->password)) {
return $user;
}
});
Fortify::registerView(function () {
return view('auth.register');//ユーザー登録
});
Fortify::requestPasswordResetLinkView(function () {
return view('auth.forgot-password');//パスワードリセットリンク
});
Fortify::resetPasswordView(function ($request) {
return view('auth.reset-password', ['request' => $request]);//パスワードリセット
});
Fortify::verifyEmailView(function () {
return view('auth.verify-email');//メールの確認
});
Fortify::confirmPasswordView(function () {
return view('auth.confirm-password');//パスワードの確認
});
}
- login.blade.phpに、/loginへPOSTリクエストを行うフォームが含まれていることを確認する。
- デフォルトでは、メール/ユーザー名とパスワードを想定。config/fortify.phpのusernameと一致しているか確認する。メールではなくuseridに変えた場合、config/fortify.phpも同様に修正する。
- ユーザー認証をカスタマイズしたい場合、Fortify::authenticateUsingメソッドを使用する。emailをuseridに変えている場合、emailを変更する。
- ログインが成功すると、config/fortifyのhome設定オプションで設定されているURIへリダイレクトする。ここをカスタマイズする場合、FortifyServiceProviderクラスのregister()で設定する。
- 認証の中身は、fortify/routes/routes.phpを参照する。
参照
・laravel/fortify
・Laravel 9.x Laravel Fortify
・Laravel Fortify