【PHP/Laravel】Laravel Fortify

php-laravel

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.phpproviders配列内に、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

Laravel, php, programming

Posted by 異世界攻略班