人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

Laravel 6 7 で ユーザー認証(Auth)機能を作成する

● Laravel 6 や 7 では、昔ながらの php artisan make:auth コマンドが実行できなくなりました

代わりに php artisan ui vue --auth コマンドが追加されました。  

● Laravel 7 で ユーザー認証(Auth)機能を作成する(bootstrapを使用する場合)

composer require laravel/ui
php artisan ui bootstrap --auth
npm install && npm run dev

● Laravel 7 で ユーザー認証(Auth)機能を作成する(Vue.jsを使用する場合)

composer require laravel/ui
npm install
php artisan ui vue --auth
npm install && npm run dev

● 初期設定を行う

Laravel で最初にやっておいた方が良い初期設定|プログラムメモ

● Auth用DBテーブルを生成する

php artisan migrate

● ログイン画面にアクセスする

https://YOUR-SERVER.TLD/login


● メール認証機能 1.(登録ユーザーのメールアドレス確認を追加する)

app/User.php

class User extends Authenticatable
{

 ↓

class User extends Authenticatable implements MustVerifyEmail
{

routes/web.php

Auth::routes();

  ↓

Auth::routes([
    'verify'   => true, // メール確認機能(※5.7系以上のみ)
    'register' => true, // デフォルトの登録機能ON
    'reset'    => true,  // メールリマインダー機能ON
]);

● メール認証機能 2.(ミドルウェアの認証を verified に変更する)

auth だと本登録しなくてもログインできてしまうので authの後に verified を追加します

Route::group(['middleware' => ['auth']], function () {
    Route::get("file/downloadlocalfile/", "FrontFileController@downloadlocalfile")->name("file.downloadlocalfile");
});

   ↓ auth verified に変更する

Route::group(['middleware' => ['auth', 'verified']], function () {
    Route::get("file/downloadlocalfile/", "FrontFileController@downloadlocalfile")->name("file.downloadlocalfile");
});

● メール認証機能 2.(ログイン後にメール認証がまだのユーザーの場合は認証メール再送信画面へ強制的に遷移させる)

app/Http/Controllers/Auth/LoginController.php

    /**
     * ユーザーが認証された後の処理
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  mixed  $user
     * @return mixed
     */
    protected function authenticated(\Illuminate\Http\Request $request, $user)
    {
        if( $user->email_verified_at === null ){
            return redirect()->route('verification.notice', ['message'=>'メールアドレス認証が完了していません']);
        }
    }

● メール認証機能 3.(確認メール再送信画面をカスタマイズする)

app/Http/Controllers/Auth/VerificationController.php

    public function resend( \Illuminate\Http\Request $request)
    {
        if ($request->user()->hasVerifiedEmail()) {
            return $request->wantsJson()
                        ? new Response('', 204)
                        : redirect($this->redirectPath());
        }

        $request->user()->sendEmailVerificationNotification();

        return $request->wantsJson()
                    ? new Response('', 202)
                    : back()->with('resent', true);
    }

また、確認メールを送信したかどうかは ビューファイル resources/views/auth/verify.blade.php の中で

                        @if (session('resent') == true )
                            確認メールを送信しました。(再送信する場合はクリック)
                        @else
                            確認メール再送信
                        @endif

のようにして取得できます。

No.1615
10/12 10:46

edit