ユーザ用ツール

サイト用ツール


プログラム言語:php:laravel:認証:laravel7でマルチ認証

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
プログラム言語:php:laravel:認証:laravel7でマルチ認証 [2021/03/03 10:52]
humolife [コントローラー]
プログラム言語:php:laravel:認証:laravel7でマルチ認証 [2021/12/16 18:27] (現在)
humolife [パッケージのインストール]
行 8: 行 8:
 php artisan ui vue --auth php artisan ui vue --auth
  
 +# vue.js を使わない場合は、以下の手順は不要
 # NodeJS がない場合はインストール # NodeJS がない場合はインストール
 curl -sL https://rpm.nodesource.com/setup_14.x | bash - curl -sL https://rpm.nodesource.com/setup_14.x | bash -
行 34: 行 35:
 # マイグレーションの実行 # マイグレーションの実行
 php artisan migrate php artisan migrate
 +</code>
 +
 +===== モデル =====
 +app 直下にある User.php を app\Models の中に 移動。
 +<code:php|app\Models\User.php>
 +// ディレクトリを移動したので、namespace を書き換え
 +namespace App;
 + ↓
 +namespace App\Models;
 +</code>
 +<code:php|app\Models\Admin.php>
 +// app\Models\User.php の内容をコピペし、クラス名を書き換える
 +class User extends Authenticatable
 + ↓
 +class Admin extends Authenticatable
 +</code>
 +モデルファイルのパスが変わったので、関係するファイルも書き換え。
 +<code:php|app\Http\Controllers\Auth\RegisterController.php>
 +use App\User;
 + ↓
 +use App\Models\User;
 +</code>
 +<code:php|config\auth.php>
 +'model' => App\User::class,
 + ↓
 +'model' => App\Models\User::class,
 </code> </code>
  
行 44: 行 71:
 </code> </code>
 <code:php|database\seeds\UsersTableSeeder.php> <code:php|database\seeds\UsersTableSeeder.php>
 +// 追加
 +use App\Models\User;
 +
     public function run()     public function run()
     {     {
-        // 追加 +        // 本番環境以外でのみアカウントを追加 
-        DB::table('users')->insert([ +        if (config('app.env') !== 'production') { 
-            'name'              => 'user', +            $user = User::where('email', 'user@example.com')->first(); 
-            'email            ='user@example.com', +            if (is_null($user)) { 
-            'password         => Hash::make('user'), +                $user new User(); 
-            'remember_token'    =Str::random(10), +                $user->name = 'user'; 
-        ]);+                $user->email = 'user@example.com'; 
 +                $user->password = bcrypt('user'); 
 +                $user->save()
 +            } 
 +        }
     }     }
 </code> </code>
 <code:php|database\seeds\AdminsTableSeeder.php> <code:php|database\seeds\AdminsTableSeeder.php>
 +// 追加
 +use App\Models\Admin;
 +
     public function run()     public function run()
     {     {
-        // 追加 +        // 本番環境以外でのみアカウントを追加 
-        DB::table('admins')->insert([ +        if (config('app.env') !== 'production') { 
-            'name'              => 'admin', +            $admin = Admin::where('email', 'admin@example.com')->first(); 
-            'email            ='admin@example.com', +            if (is_null($admin)) { 
-            'password         => Hash::make('admin'), +                $admin new Admin(); 
-            'remember_token'    =Str::random(10), +                $admin->name = 'admin'; 
-        ]);+                $admin->email = 'admin@example.com'; 
 +                $admin->password = bcrypt('admin'); 
 +                $admin->save()
 +            } 
 +        }
     }     }
 </code> </code>
行 85: 行 126:
 </code> </code>
  
-===== モデル ===== 
-app 直下にある User.php を app\Models の中に 移動。 
-<code:php|app\Models\User.php> 
-// ディレクトリを移動したので、namespace を書き換え 
-namespace App; 
- ↓ 
-namespace App\Models; 
-</code> 
-<code:php|app\Models\Admin.php> 
-// app\Models\User.php の内容をコピペし、クラス名を書き換える 
-class User extends Authenticatable 
- ↓ 
-class Admin extends Authenticatable 
-</code> 
-モデルファイルのパスが変わったので、関係するファイルも書き換え。 
-<code:php|app\Http\Controllers\Auth\RegisterController.php> 
-use App\User; 
- ↓ 
-use App\Models\User; 
-</code> 
-<code:php|config\auth.php> 
-'model' => App\User::class, 
- ↓ 
-'model' => App\Models\User::class, 
-</code> 
 ===== コンフィグ ===== ===== コンフィグ =====
 認証の設定ファイルをマルチ認証対応に書き換える。 認証の設定ファイルをマルチ認証対応に書き換える。
行 178: 行 194:
     public function __construct()     public function __construct()
     {     {
-        // 今回ルーティング側で auth 設定をしているためコンストラクタでは何もしない+        // 今回ルーティング側で auth 設定をしているため 
 +        // コンストラクタでは何もしない
         // コントローラ側で auth を設定したい場合は以下のようにする         // コントローラ側で auth を設定したい場合は以下のようにする
         // $this->middleware('auth:user');         // $this->middleware('auth:user');
行 227: 行 244:
 </code> </code>
 app\Http\Controllers\User ディレクトリをコピーして Admin ディレクトリを作成。\\ app\Http\Controllers\User ディレクトリをコピーして Admin ディレクトリを作成。\\
-ディレクトリ内のファイルそれぞれ以下の置換を行う。+ディレクトリ内のファイル、以下の置換を行う。
   * User → Admin   * User → Admin
   * user → admin   * user → admin
 +※ AuthenticatesUsers を AuthenticatesAdmins に置換しないように注意
  
 +==== ログイン後のリダイレクト先を Admin 用に書き換える ====
 +<code:php|app\Http\Controllers\Admin\Auth\LoginController.php>
 +    protected $redirectTo = RouteServiceProvider::ADMIN_HOME;
 +</code>
 ===== ルーティング ===== ===== ルーティング =====
 <code:php|routes\web.php> <code:php|routes\web.php>
行 260: 行 282:
 ===== その他書き換え ===== ===== その他書き換え =====
 <code:php|app\Providers\RouteServiceProvider.php> <code:php|app\Providers\RouteServiceProvider.php>
 +    // 書き換え
     public const HOME = '/user/home';     public const HOME = '/user/home';
 +    // 追加
     public const ADMIN_HOME = '/admin/home';     public const ADMIN_HOME = '/admin/home';
 </code> </code>
 <code:php|app\Http\Middleware\Authenticate.php> <code:php|app\Http\Middleware\Authenticate.php>
 +// 追加
 use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Route;
  
     protected function redirectTo($request)     protected function redirectTo($request)
     {     {
 +        // 書き換え
         if (! $request->expectsJson()) {         if (! $request->expectsJson()) {
             if (Route::is('user.*')) {             if (Route::is('user.*')) {
行 281: 行 307:
     public function handle($request, Closure $next, $guard = null)     public function handle($request, Closure $next, $guard = null)
     {     {
 +        // 書き換え
         if (Auth::guard($guard)->check() && $guard === 'user') {         if (Auth::guard($guard)->check() && $guard === 'user') {
             return redirect(RouteServiceProvider::HOME);             return redirect(RouteServiceProvider::HOME);
行 286: 行 313:
             return redirect(RouteServiceProvider::ADMIN_HOME);             return redirect(RouteServiceProvider::ADMIN_HOME);
         }         }
- 
         return $next($request);         return $next($request);
     }     }
 </code> </code>
 +<code:php|app\Exceptions\Handler.php>
 +// 追加
 +use Illuminate\Session\TokenMismatchException;
 +
 +    public function render($request, Throwable $exception)
 +    {
 +        // 追加
 +        // 419 csrf トークン切れで戻る
 +        if ($exception instanceof TokenMismatchException) {
 +            return back()->withErrors(['time_out' => 'セッションがタイムアウトしました']);
 +        }
 +
 +        return parent::render($request, $exception);
 +    }
 +</code>
 +
 +===== ビュー =====
 +views\layouts にある app.blade.php を app_user.blade.php などにリネーム。
 +<code:php|resources\views\layouts\app_user.blade.php>
 +// リンク先などを必要に応じて変更
 +route('login')
 + ↓
 +route('user.login')
 +
 +route('logout')
 + ↓
 +route('user.logout')
 +</code>
 +app_user.blade.php をコピーして app_admin.blade.php を作成。\\
 +リンク先を route('admin.login') など admin 用に変更。
 +
 +resources\views 直下に user ディレクトリ作成し、auth ディレクトリと home.blade.php を移動。\\
 +home.blade.php で extends しているファイルを変更。
 +<code:php|resources\views\user\home.blade.php>
 +// 書き換え
 +@extends('layouts.app_user')
 +</code>
 +auth ディレクトリ内にある login.blade.php 以外を削除する。
 +<code:php|resources\views\user\auth\login.blade.php>
 +// 書き換え
 +@extends('layouts.app_user')
 +
 +// リンク先を変更
 +route('login')
 + ↓
 +route('user.login')
 +</code>
 +resources\views\user をコピーして admin ディレクトリを作成。\\
 +admin ディレクトリ内の各ファイルについて、以下の置換を行う。
 +  * user → admin
 +
 +一通り作業が完了したので、user、admin それぞれの URL にアクセスしてログイン画面が表示されることを確認。\\
 +https://example.com/user/home\\
 +https://example.com/admin/home
  
プログラム言語/php/laravel/認証/laravel7でマルチ認証.1614736352.txt.gz · 最終更新: 2021/03/03 10:52 by humolife