このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 最新のリビジョン 両方とも次のリビジョン | ||
プログラム言語:php:laravel:認証:laravel7でマルチ認証 [2021/03/03 10:17] humolife [コントローラー] |
プログラム言語:php:laravel:認証:laravel7でマルチ認証 [2021/05/26 17:50] humolife [コントローラー] |
||
---|---|---|---|
行 8: | 行 8: | ||
php artisan ui vue --auth | php artisan ui vue --auth | ||
+ | # NodeJS がない場合はインストール | ||
+ | curl -sL https:// | ||
+ | yum -y install nodejs | ||
+ | |||
+ | # package.json に記載されたパッケージのインストール | ||
npm install | npm install | ||
- | # 未圧縮(開発環境など) | + | # css、js ファイルのビルド(未圧縮) |
npm run dev | npm run dev | ||
- | # 圧縮(本番環境など) | + | # css、js ファイルのビルド(圧縮) |
npm run production | npm run production | ||
</ | </ | ||
行 29: | 行 34: | ||
# マイグレーションの実行 | # マイグレーションの実行 | ||
php artisan migrate | php artisan migrate | ||
+ | </ | ||
+ | |||
+ | ===== モデル ===== | ||
+ | app 直下にある User.php を app\Models の中に 移動。 | ||
+ | < | ||
+ | // ディレクトリを移動したので、namespace を書き換え | ||
+ | namespace App; | ||
+ | ↓ | ||
+ | namespace App\Models; | ||
+ | </ | ||
+ | < | ||
+ | // app\Models\User.php の内容をコピペし、クラス名を書き換える | ||
+ | class User extends Authenticatable | ||
+ | ↓ | ||
+ | class Admin extends Authenticatable | ||
+ | </ | ||
+ | モデルファイルのパスが変わったので、関係するファイルも書き換え。 | ||
+ | < | ||
+ | use App\User; | ||
+ | ↓ | ||
+ | use App\Models\User; | ||
+ | </ | ||
+ | < | ||
+ | ' | ||
+ | ↓ | ||
+ | ' | ||
</ | </ | ||
行 39: | 行 70: | ||
</ | </ | ||
< | < | ||
- | <?php | + | // 追加 |
+ | use App\Models\User; | ||
- | use Illuminate\Database\Seeder; | ||
- | |||
- | class UsersTableSeeder extends Seeder | ||
- | { | ||
public function run() | public function run() | ||
{ | { | ||
- | | + | |
- | | + | if (config(' |
- | ' | + | $user = User::where('email', |
- | ' | + | |
- | ' | + | $user = new User(); |
- | | + | $user->name = ' |
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | | ||
} | } | ||
- | } | ||
</ | </ | ||
< | < | ||
- | <?php | + | // 追加 |
- | + | use App\Models\Admin; | |
- | use Illuminate\Database\Seeder; | + | |
- | class AdminsTableSeeder extends Seeder | ||
- | { | ||
public function run() | public function run() | ||
{ | { | ||
- | | + | |
- | | + | if (config(' |
- | ' | + | $admin = Admin::where('email', |
- | ' | + | |
- | ' | + | $admin |
- | | + | $admin->name = ' |
+ | | ||
+ | | ||
+ | | ||
+ | } | ||
+ | | ||
} | } | ||
- | } | ||
</ | </ | ||
< | < | ||
- | <?php | ||
- | |||
- | use Illuminate\Database\Seeder; | ||
- | |||
- | class DatabaseSeeder extends Seeder | ||
- | { | ||
public function run() | public function run() | ||
{ | { | ||
+ | // 追加 | ||
$this-> | $this-> | ||
AdminsTableSeeder:: | AdminsTableSeeder:: | ||
行 88: | 行 116: | ||
]); | ]); | ||
} | } | ||
- | } | ||
</ | </ | ||
< | < | ||
行 98: | 行 125: | ||
</ | </ | ||
- | ===== モデル ===== | ||
- | app 直下にある User.php を app\Models の中に 移動。 | ||
- | < | ||
- | // ディレクトリを移動したので、namespace を書き換え | ||
- | namespace App; | ||
- | ↓ | ||
- | namespace App\Models; | ||
- | </ | ||
- | < | ||
- | // app\Models\User.php の内容をコピペし、クラス名を書き換える | ||
- | class User extends Authenticatable | ||
- | ↓ | ||
- | class Admin extends Authenticatable | ||
- | </ | ||
- | モデルファイルのパスが変わったので、関係するファイルも書き換え。 | ||
- | < | ||
- | use App\User; | ||
- | ↓ | ||
- | use App\Models\User; | ||
- | </ | ||
- | < | ||
- | ' | ||
- | ↓ | ||
- | ' | ||
- | </ | ||
===== コンフィグ ===== | ===== コンフィグ ===== | ||
認証の設定ファイルをマルチ認証対応に書き換える。 | 認証の設定ファイルをマルチ認証対応に書き換える。 | ||
行 181: | 行 183: | ||
===== コントローラー ===== | ===== コントローラー ===== | ||
app\Http\Controllers に User ディレクトリを作成し、Auth ディレクトリと HomeController.php をその中に移動。\\ | app\Http\Controllers に User ディレクトリを作成し、Auth ディレクトリと HomeController.php をその中に移動。\\ | ||
- | 今回、ログイン機能しか使わないため Auth 内のファイルは LoginController.php を残して削除。 | + | 今回、ログイン機能しか使わないため Auth 内のファイルは LoginController.php |
< | < | ||
// namespace を書き換え | // namespace を書き換え | ||
行 192: | 行 194: | ||
{ | { | ||
// 今回ルーティング側で auth 設定をしているため | // 今回ルーティング側で auth 設定をしているため | ||
- | // 以下のコメント行は削除 | + | // コンストラクタでは何もしない |
+ | // コントローラ側で auth を設定したい場合は以下のようにする | ||
// $this-> | // $this-> | ||
} | } | ||
行 240: | 行 243: | ||
</ | </ | ||
app\Http\Controllers\User ディレクトリをコピーして Admin ディレクトリを作成。\\ | app\Http\Controllers\User ディレクトリをコピーして Admin ディレクトリを作成。\\ | ||
- | ディレクトリ内のファイルで、それぞれ以下の置換を行う。 | + | ディレクトリ内の各ファイルに、以下の置換を行う。 |
* User → Admin | * User → Admin | ||
* user → admin | * user → admin | ||
+ | ※ AuthenticatesUsers を AuthenticatesAdmins に置換しないように注意 | ||
+ | ==== ログイン後のリダイレクト先を Admin 用に書き換える ==== | ||
+ | < | ||
+ | protected $redirectTo = RouteServiceProvider:: | ||
+ | </ | ||
===== ルーティング ===== | ===== ルーティング ===== | ||
< | < | ||
行 273: | 行 281: | ||
===== その他書き換え ===== | ===== その他書き換え ===== | ||
< | < | ||
+ | // 書き換え | ||
public const HOME = '/ | public const HOME = '/ | ||
+ | // 追加 | ||
public const ADMIN_HOME = '/ | public const ADMIN_HOME = '/ | ||
</ | </ | ||
< | < | ||
+ | // 追加 | ||
use Illuminate\Support\Facades\Route; | use Illuminate\Support\Facades\Route; | ||
protected function redirectTo($request) | protected function redirectTo($request) | ||
{ | { | ||
+ | // 書き換え | ||
if (! $request-> | if (! $request-> | ||
if (Route:: | if (Route:: | ||
行 294: | 行 306: | ||
public function handle($request, | public function handle($request, | ||
{ | { | ||
+ | // 書き換え | ||
if (Auth:: | if (Auth:: | ||
return redirect(RouteServiceProvider:: | return redirect(RouteServiceProvider:: | ||
行 299: | 行 312: | ||
return redirect(RouteServiceProvider:: | return redirect(RouteServiceProvider:: | ||
} | } | ||
- | |||
return $next($request); | return $next($request); | ||
} | } | ||
</ | </ | ||
+ | < | ||
+ | // 追加 | ||
+ | use Illuminate\Session\TokenMismatchException; | ||
+ | |||
+ | public function render($request, | ||
+ | { | ||
+ | // 追加 | ||
+ | // 419 csrf トークン切れで戻る | ||
+ | if ($exception instanceof TokenMismatchException) { | ||
+ | return back()-> | ||
+ | } | ||
+ | |||
+ | return parent:: | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== ビュー ===== | ||
+ | views\layouts にある app.blade.php を app_user.blade.php などにリネーム。 | ||
+ | < | ||
+ | // リンク先などを必要に応じて変更 | ||
+ | route(' | ||
+ | ↓ | ||
+ | route(' | ||
+ | |||
+ | route(' | ||
+ | ↓ | ||
+ | route(' | ||
+ | </ | ||
+ | app_user.blade.php をコピーして app_admin.blade.php を作成。\\ | ||
+ | リンク先を route(' | ||
+ | |||
+ | resources\views 直下に user ディレクトリ作成し、auth ディレクトリと home.blade.php を移動。\\ | ||
+ | home.blade.php で extends しているファイルを変更。 | ||
+ | < | ||
+ | // 書き換え | ||
+ | @extends(' | ||
+ | </ | ||
+ | auth ディレクトリ内にある login.blade.php 以外を削除する。 | ||
+ | < | ||
+ | // 書き換え | ||
+ | @extends(' | ||
+ | |||
+ | // リンク先を変更 | ||
+ | route(' | ||
+ | ↓ | ||
+ | route(' | ||
+ | </ | ||
+ | resources\views\user をコピーして admin ディレクトリを作成。\\ | ||
+ | admin ディレクトリ内の各ファイルについて、以下の置換を行う。 | ||
+ | * user → admin | ||
+ | |||
+ | 一通り作業が完了したので、user、admin それぞれの URL にアクセスしてログイン画面が表示されることを確認。\\ | ||
+ | https:// | ||
+ | https:// | ||