バックエンド

【Laravel】マルチログイン(ユーザーと管理者など)機能を設定してみた【体験談】

インターネット上で写真や情報をやりとりできるような

『Webアプリ』や『Webサービス』では、

使う人(ユーザー)がログインして、

自分専用の管理画面から記事を投稿したり、写真をアップできるようになっています。

PHPのてんこもりフレームワーク『Laravel(ララベル)』では、

使う人(ユーザー)がログインだけの機能であれば、

ものの1分でつくる事ができるようになっています。

php artisan make:auth

という魔法のコマンドをうつだけ。

アオキ
なんて簡単なんだ・・

一方、

使う人(ユーザー)の管理画面とは別に、

設定する側(管理側・管理者)の管理画面も欲しい!っとなると、

ちょっとややこしい設定が必要になってきます。

今回はそんなマルチログイン機能についてまとめてみました。

Laravel 5.5 で実施しています。

Sponsored link

Laravelでマルチログイン機能 変更必要なファイル群

今回は、

  • 使う人用 user
  • 管理側 admin

の2つの管理画面をつくる事を想定しています。

アドレス(URL)は、

  • 使う人用 user

ログイン画面 /login
管理画面 /home

  • 管理側 admin

ログイン画面 /admin/login
管理画面 /admin/home

としています。

2つの管理画面の作り方がわかれば、あとは応用で、

3つでも4つでも管理画面を分けることができるようになります。

変更必要なファイル群はこれらです。

  1. create_admins_table.php (マイグレーション)
  2. Admin.php (モデル)
  3. config/auth.php (認証設定ファイル)
  4. app/Exceptions/Handler.php (ログインしてない時の挙動)
  5. route/web.php (ルーティング)
  6. HomeController.php (コントローラー)
  7. LoginController.php (コントローラー)
  8. views/admin/login.blade.php (ビュー)
  9. views/admin/home.blade.php (ビュー)
  10. views/layout/app_admin.blade.php (ビュー(レイアウト))
アオキ
ね、大変そうでしょ?

頑張ってコツコツやっていけば1時間もあればできると思うので、

ぜひレッツトライ!

Laravelでマルチログイン機能 下準備

何はともあれ『Laravel』プロジェクト作成をば。

PHPライブラリをもりっと管理できる『composer』がインストールされている状態で、

で auth-test プロジェクト (フォルダ) が作成されます。

参考記事

cd auth-test

で プロジェクトフォルダに移動したらおもむろに、

php artisan make:auth
php artisan migrate

とうって、

使う人用(user)側のログイン関連のファイルはあっさり作成されます。

アオキ
ここまでは簡単なんだけど、問題はここから・・
Sponsored link

Laravelでマルチログイン機能 データベース周り

php artisan make:model Admin -m

とコマンドを打つ事で、

App¥Admin.php ファイル (モデルファイル)と、
create_admins_table.php ファイル (マイグレーションファイル)が生成されます。

すでに User.php (使う側用のモデルファイル)が生成されているので、

中身をコピーしつつ、 class名を Admin に変えておきます。

create_admins_table.php ファイル (マイグレーションファイル) も

create_users_table.php ファイルをコピーしつつ、
class名と upメソッドのusrsをadminsに変えます。

Laravelでマルチログイン機能 認証ファイル(auth.php)

config/auth.php (認証設定ファイル) に、admin側の設定を追加します。

『Laravel』にはguards(ガード)という機能があって、

どんなログイン方法にするか(セッションにするかトークンにするかなど)、

どのデータベースの情報を見にいくか(UserテーブルかAdminテーブルかなど)、

といった設定を書くことができます。

このファイルに記載していく事で、管理画面を3つにも4つにも増やすことができます。

Sponsored link

Laravelでマルチログイン機能 リダイレクト先の設定

app/Exceptions/Handler.php ファイルで、

ログインしていない時はどの画面を表示させるか、というのを決めることができます。

app/Exceptions/Handler.php ファイルに『unauthenticated メソッド』を書く必要があるんですが、

なぜか『Laravel5.5』からはこのメソッドが消えています

とはいえ、

『Illuminate\Auth\AuthenticationException』ファイルには『unauthenticated メソッド』が書かれているので、

それを上書き(オーバーライド)する形で書けばOKです。

参考記事

Laravel5.5で未認証時にリダイレクトさせる処理

Laravelでマルチログイン機能 ルーティング

URLにアクセスしたときにどの処理をするかを担当するのがルーティングファイルです。

  • 使う人用 user

ログイン画面 /login
管理画面 /home

  • 管理側 admin

ログイン画面 /admin/login
管理画面 /admin/home

というURL構成になっています。

group で設定をくくって、

  • prefix ・・URLの頭につける文 ‘prefix’ => ‘admin’ なら admin/login などになる。
  • ‘middleware’ => ‘auth:admin’ ・・認証していれば表示できる

    といった内容を追加しています。

Sponsored link

Laravelでマルチログイン機能 コントローラー

app/Http/Controllers/の下にAdminフォルダをつくって、

その中にLoginController.phpとHomeController.phpをコピぺします。

Laravelでマルチログイン機能 ビュー(見た目)

resources/viewsの下にadminフォルダをつくって、

login.blade.phpとhome.blade.phpをコピぺします。

また、layoutsフォルダの下にあるapp.blade.phpをコピぺして、

app_admin.blade.phpとして保存しておきます。

アオキ
ビューファイルは行が多い割に変更点が少ないのであっさりと。

layouts/app_admin.blade.phpの編集箇所

ユーザーログイン画面と区別するため背景色を変更します。

views/admin/login.blade.phpの編集箇所

views/admin/home.blade.phpの編集箇所

こんな画面になればOKです。

login (ユーザー側)

admin/login (管理側)

アオキ
実際にログインしたりログアウトしてみて、ちゃんと動いているかチェックしときましょ。
Sponsored link

Laravelでマルチログイン機能 tinkerでadminユーザーをつくる

管理側からは新規登録できないようにしていますが、
それだと管理側からログインができなくなってしまうので、

『Laravel』の機能、tinker を使って、管理側用のアカウントをつくっておくといいです。

php artisan tinker

注意点として、パスワードはbcrypt関数を使って暗号化しておく必要があります。

Laravelでマルチログイン機能 注意点 (経験談)

マルチログインでは、セッションやリダイレクトを使う関係で、

思うように動かない場合がままあります。

アオキ
最初はけっこう苦戦しました・・

Laravelでマルチログイン機能 注意点1 セッション

使う側(ユーザー)でログインして、

ログインしたまま管理側のログイン画面に移動してログインしようとすると

うまく動かない場合があります。

おそらくですが『セッション』が残ったままになっていると思われます。

– セッション・・ ブラウザとサーバーで情報を保持する仕組み

ログアウトの時に『セッション』を破棄するような記載になっているので、

使う側(ユーザー)でログインした後に、管理側でもログインしたい場合は、

使う側(ユーザー)でログアウトしてセッションを破棄してから

管理側でログインするようにした方がよいようです。

Laravelでマルチログイン機能 注意点2 キャッシュなど消す

キャッシュや設定も情報が残っていたりするので、

うまく動かない場合はこれらのコマンドも試してみるといいかもです。

composer dump-autoload //クラス情報・マイグレーション情報などを最適化
php artisan config:cache //設定ファイルのキャッシュクリア
php artisan route:clear //ルーティング情報クリア
php artisan cache:clear //キャッシュクリア

あとはブラウザで、Shiftキー押しながらF5を押してキャッシュクリアしたり。
(Macなら Ctrl +Shift + R だったはず)

Laravelでマルチログイン機能 をつくってみて

最初にトライしたときはなかなかうまくいかなくて、

気を取り直して最初から試したらあっさり実装できたりしたので、

キャッシュやセッションなど情報が残る仕組みのおかげで、

ちょっと大変な設定かなと思いますが、

コツがわかればいくらでも管理画面がつくれるし、

つくれる『Webサービス』の幅も格段に広がると思うので、

ぜひチャレンジしてもらえればと思います。

アオキ
管理画面2つや3つつくれるようになるともはやなんでもできる気がしてきますな (気のせい

参考サイト

Laravel5.4でマルチ認証(userとadmin)を実装する方法

『Laravel』ではこんな記事も読まれています。

1. 【Laravel(PHP)】初心者向け アプリのつくり方 をリリースしました【techpit】

2. 【Laravel(PHP)】でできる事をわかりやすく(ざっくりと)まとめてみた【用語集も兼ねて】【初心者向け】

3. 【PHP】【Laravel】CSVエクスポートの方法〜5つのポイント〜

4. 【PHP】CSVインポートの方法〜大量データもバルクインサートでバッチリ!〜【laravel】

5. 【Laravel】ダミー(テスト)データを作る方法 シーダー(seeder)とfactoryとfaker【初心者向け】

6. 【Laravel】Webアプリ環境構築の仕方【Vue.js】【初心者向け】

7. 【Laravel】と【Vue.js】のサンプル動画を見ながらさらりと解説してみる

8. 【Laravel】マルチログイン(ユーザーと管理者など)機能を設定してみた【体験談】

9. 【Laravel】フォトギャラリーを作るための画像アップロード方法【php】

10. 【Laravel】多対多テーブルを複数つくる方法【ちょっとコツがいります】

11. 【Laravel】【Slack】に通知する方法をまとめてみた【自作ファサード】

アオキ
ツイッターでも記事ネタ含めちょろちょろ書いていくので、よろしければぜひフォローお願いしますm(_ _ )m

アオキのツイッターアカウント


関連記事一覧 (一部広告あり)

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


最近の記事

  1. バックエンド

    【検索システム】をつくってみた【実際にログインしてさわれます】
  2. IoT関連

    【Arduino】ラジコンをつくってみた 〜今ドキのプログラムの覚え方
  3. バックエンド

    【厳選8冊】ホームページを作れるようになるためのおすすめ本【初心者向け】
  4. CG関連

    【WebGL】入門 わかりやすく【図解】してみた
  5. 数学

    【三角関数】とは わかりやすくまとめてみた【動画あり】
PAGE TOP