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

Laravelで admin / user のMulti-Auth を素早く作成する

管理者側テーブル「admin」を利用した認証とユーザー側テーブル「users」を利用した認証を作成する
「素早く」がテーマなので composer パッケージを利用します。
Laravel 5.6 でのやり方です。

「Laravelアプリの作成」「DB接続設定」は設定完了しているものとします。

● Hesto/multi-auth

https://github.com/Hesto/multi-auth

・パッケージのインストール

composer require hesto/multi-auth

・認証ファイルのインストール(小文字、単数形で命名します)

php artisan multi-auth:install admin -f
php artisan multi-auth:install user -f

・DBの作成

php artisan migrate

以上です。

・早速使う

管理者ログイン

http://YOUR-SITE.TLD/admin/login

ユーザーログイン

http://YOUR-SITE.TLD/user/login

・Bladeでの認証記述方法

Bladeテンプレートで adminまたはuserでログインしているかどうかを判別する

@if ( Auth::guard('admin')->check() )
<h1>adminとしてログイン済みです</h1>
@endif
@if ( Auth::guest() )
<h1>管理者ログイン前のguestです</h1>
@endif

・Bladeテンプレートでログイン後のユーザー名を表示する

{{ Auth::guard('user')->user()->name }}

● コントローラで認証チェックを使用する

app/Http/Kernel.php には以下のような記述が増えています

    protected $routeMiddleware = [
        'user' => \App\Http\Middleware\RedirectIfNotUser::class,
        'user.guest' => \App\Http\Middleware\RedirectIfUser::class,
        'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class,
        'admin.guest' => \App\Http\Middleware\RedirectIfAdmin::class,
........

なのでこれを使用しましょう。

コントローラのコンストラクタに以下のように記述します

	function __construct(){
		// admin ログイン認証
		$this->middleware('admin');
	}

● ルーターで認証チェックを使用する

routes/web.php に次のように 'middleware' => 'admin' を追加します

// admin ログインが必要なページ
Route::group(['prefix' => 'admin', 'middleware' => 'admin'], function () {
            Route::get("articles/index", "ArticleController@index")->name("articles.index");
});

● 管理者、ユーザー毎にログアウトした時のリダイレクト先を設定する

ログアウトした時のリダイレクト先はコントローラーで設定します
管理者用、ユーザー用のAuthコントローラーは
/app/Http/Controllers/AdminAuth/LoginController.php
/app/Http/Controllers/UserAuth/LoginController.php
にあるので、ここに記述します。
vendor/hesto/multi-auth/src/Traits/LogsoutGuard.php のトレイトをオーバーライドします )

    // ログアウト後のリダイレクト先を「/admin/login」に設定する
        public function logoutToPath() {
        return '/admin/login';
    }

● /user/home , /admin/home など homeアクションの動作をカスタマイズする

デフォルトでは routes/user.php

Route::get('/home', function () {
    $users[] = Auth::user();
    $users[] = Auth::guard()->user();
    $users[] = Auth::guard('admin')->user();
    return view('admin.home');
})->name('home');

という風にクロージャで /user/home へのルーティングが記述されています。 これらを消してしまってroutes/web.php に記述していくと見通しがいいと思います。

● パスワードリマインダーのメールテキストを変更する

パスワードリマインダーの文面は

app/Notifications/AdminResetPassword.php
app/Notifications/UserResetPassword.php

といった場所に作成されます。
これを変更しましょう。

    public function toMail($notifiable)
    {
        return (new MailMessage)
            ->line('You are receiving this email because we received a password reset request for your account.')
            ->action('Reset Password', url('admin/password/reset', $this->token))
            ->line('If you did not request a password reset, no further action is required.');
    }

 ↓

    public function toMail($notifiable)
    {
        return (new MailMessage)
                ->subject('管理者メールのリセット')
                ->line('管理者パスワードリセットがリクエストされました')
                ->action('管理者パスワードをリセットする', url('admin/password/reset', $this->token))
                ->line('もし管理者パスワードリセットをリクエストしていない場合は、これ以上の操作は必要ありません。このメールを破棄してください。');
    }

このように一部日本語になります。

● パスワードリマインダーのメールデザインを変更する

こちらの方法でカスタマイズしましょう https://goo.gl/pkoo21

添付ファイル1
No.1348
11/15 16:16

edit

添付ファイル