Laravelでデータベース内の別テーブルでログインを切り替える方法

こんにちは!

今回は、Laravelでデータベース内の別テーブルでログインを切り替える方法を紹介します。

マイグレーションファイルの作成

まずは下記のコマンドでマイグレーションファイルを作成します。

上記のコマンドを実行することで、マイグレーションファイルとモデルファイルが生成されます。

モデルファイルの記述

モデルファイルを作成できたら、下記のように変更しておきます。

これを記述することで下記のエラーを回避できます。

「Argument 1 passed to Illuminate\Auth\EloquentUserProvider::validateCredentials() must be an instance of Illuminate\Contracts\Auth\Authenticatable」

マイグレーションファイルの記述

生成されたことを確認したら、今度はマイグレーションファイルを開いて編集しましょう。

データベースの項目を決める「up()」の箇所を下記のように編集しましょう。

編集ができたら、下記のコマンドでDB項目を新しく作成します。

管理ユーザーの作成

migrationコマンドで、新しくテーブルの作成ができたら、今度は仮の管理ユーザーを追加します。

仮のユーザーは、Laravelのfactoryを使って作成しましょう。

factoryは下記のコマンドで生成します。

生成ができたら、ファイルを開いて下記のように記載します。

上記コードのHash::makeのところで、「admin」というパスワードに設定してあります。

設定ができたら、今度はプロジェクト直下のところまで移動して、下記のコマンドを実行します。

すると下記のようにコマンド実行モードみたいな形になるので、その中で下記のコマンドでユーザーを作成しましょう。


Laravel6系を使っていると、下記のようにエラーが出ます。
Call to undefined function str_random()

なので、手動でヘルパーを入れましょう。

うまく作成できると、下記のような画面が表示されます。


admin_usersテーブルを使って管理者ログイン

仮のユーザーが作成できたら、今度はそのユーザーを使って管理者ログインを実装します。

管理者ログインでは、下記の手順で実装していきます。

・専用のmiddlewareを作成。
・guardsに登録

専用のmiddlewareを作成

専用のmiddlewareは下記のコマンドで実行します。

作成ができたら、中を下記のように変更しましょう。

変更ができたら、Kernel.phpの「routeMiddleware」の箇所に変更を加えます。


登録ができたら、制御したい箇所のコントローラーの「__construct」の部分にmidllewareを追加します。

guardsに登録

追加ができたら、今度は「guards」に登録します。

「gurads」は「auth.php」の箇所に存在するので、そこで設定します。

下記のように追加しましょう。

同じファイル内に「providers」という項目があります。

そこに、下記のように追加しましょう。

管理者専用ログインコントローラーの作成

ここまで設定したら、最後に管理者専用コントローラーを作成します。

下記のコマンドでコントローラーを作成しましょう。

作成したら中身は下記のようにします。

遷移するページ先として、AdminControllerも作成しておきます。

作成したら、middlewareを指定して、中身を下記のようにします。

今度は、ログインのViewを作成します。

あとはルーティングを下記のようにします。

現状の状態で「/admin」にアクセスしようとすると、おそらく「/admin/login」にリダイレクトされます。

ログイン画面で先程作成した、フェイクのユーザーのメールアドレスとパスワード(admin)でログインしてましょう。

すると、下記のようにうまくログインできると思います。


ログアウトについて

とりあえず、手軽にログアウト処理を入れておきたい場合は、下記のように「web.php」に記述しましょう。

「/admin/logout」にアクセスすると、ログアウトされます。

まとめ

今回はLaravelでデータベース内の別テーブルでログインを切り替える方法を紹介しました。

今回の記事があなたの役に立てたら嬉しいです。

この記事を書いた人

南 健太郎

1991年生まれ。都内でエンジニアをしています。
このブログでは、個人開発や日々の技術に関する情報などを発信していきます。