文書の過去の版を表示しています。
composer require laravel/ui:^2.4 php artisan ui vue --auth # NodeJS がない場合はインストール curl -sL https://rpm.nodesource.com/setup_14.x | bash - yum -y install nodejs # package.json に記載されたパッケージのインストール npm install # css、js ファイルのビルド(未圧縮) npm run dev # css、js ファイルのビルド(圧縮) npm run production
以下コマンドで、マイグレーションファイルとモデルファイルを作成。
# Model ファイル作成 (-m オプションでマイグレーションも作成) php artisan make:model Models/Admin -m
database\migrations に作成された「create_admins_table.php」に「create_users_table.php」の中身をコピペし、admin 用に書き換える。
# マイグレーションの実行 php artisan migrate
ログイン用のアカウントを作成する。
# シーダー作成 php artisan make:seeder UsersTableSeeder php artisan make:seeder AdminsTableSeeder
database\seeds\UsersTableSeeder.php
public function run() { // 追加 DB::table('users')->insert([ 'name' => 'user', 'email' => 'user@example.com', 'password' => Hash::make('user'), 'remember_token' => Str::random(10), ]); }
database\seeds\AdminsTableSeeder.php
public function run() { // 追加 DB::table('admins')->insert([ 'name' => 'admin', 'email' => 'admin@example.com', 'password' => Hash::make('admin'), 'remember_token' => Str::random(10), ]); }
database\seeds\DatabaseSeeder.php
public function run() { // 追加 $this->call([ AdminsTableSeeder::class, UsersTableSeeder::class, ]); }
# シーダーをオートローダに登録 php composer dump-autoload # シーディング実行 php artisan db:seed
app 直下にある User.php を app\Models の中に 移動。
app\Models\User.php
// ディレクトリを移動したので、namespace を書き換え namespace App; ↓ namespace App\Models;
app\Models\Admin.php
// app\Models\User.php の内容をコピペし、クラス名を書き換える class User extends Authenticatable ↓ class Admin extends Authenticatable
モデルファイルのパスが変わったので、関係するファイルも書き換え。
app\Http\Controllers\Auth\RegisterController.php
use App\User; ↓ use App\Models\User;
config\auth.php
'model' => App\User::class, ↓ 'model' => App\Models\User::class,
認証の設定ファイルをマルチ認証対応に書き換える。
config\auth.php
// デフォルトを user に変更 'defaults' => [ 'guard' => 'user', 'passwords' => 'users', ], 'guards' => [ // web → user に変更 'user' => [ 'driver' => 'session', 'provider' => 'users', ], // admin を追加 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], // admins を追加 'admins' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class, ], ], 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, 'throttle' => 60, ], // admins を追加 'admins' => [ 'provider' => 'admins', 'table' => 'password_resets', 'expire' => 60, 'throttle' => 60, ], ],
app\Http\Controllers に User ディレクトリを作成し、Auth ディレクトリと HomeController.php をその中に移動。
今回、ログイン機能しか使わないため Auth 内のファイルは LoginController.php を残して削除。
app\Http\Controllers\User\HomeController.php
// namespace を書き換え namespace App\Http\Controllers\User; // 追加 use App\Http\Controllers\Controller; public function __construct() { // 今回ルーティング側で auth 設定をしているため // この一連のコメント行は削除 // $this->middleware('auth:user'); } public function index() { // 書き換え return view('user.home'); }
app\Http\Controllers\User\Auth\LoginController.php
// namespace の書き換え namespace App\Http\Controllers\User\Auth; // 追加 use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; public function __construct() { // 書き換え $this->middleware('guest:user')->except('logout'); } // 以下追加 protected function guard() { return Auth::guard('user'); } public function showLoginForm() { return view('user.auth.login'); } public function logout(Request $request) { Auth::guard('user')->logout(); return $this->loggedOut($request); } public function loggedOut(Request $request) { return redirect(route('user.login')); }
app\Http\Controllers\User ディレクトリをコピーして Admin ディレクトリを作成。
ディレクトリ内のファイルで、それぞれ以下の置換を行う。
routes\web.php
Route::namespace('User')->prefix('user')->name('user.')->group(function(){ Auth::routes([ 'register' => false, 'reset' => false, 'verify' => false ]); Route::middleware('auth:user')->group(function(){ Route::get('home', 'HomeController@index')->name('home'); }); }); Route::namespace('Admin')->prefix('admin')->name('admin.')->group(function(){ Auth::routes([ 'register' => false, 'reset' => false, 'verify' => false ]); Route::middleware('auth:admin')->group(function(){ Route::get('home', 'HomeController@index')->name('home'); }); });
app\Providers\RouteServiceProvider.php
public const HOME = '/user/home'; public const ADMIN_HOME = '/admin/home';
app\Http\Middleware\Authenticate.php
use Illuminate\Support\Facades\Route; protected function redirectTo($request) { if (! $request->expectsJson()) { if (Route::is('user.*')) { return route('user.login'); } elseif (Route::is('admin.*')) { return route('admin.login'); } } }
app\Http\Middleware\RedirectIfAuthenticated.php
public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->check() && $guard === 'user') { return redirect(RouteServiceProvider::HOME); } elseif (Auth::guard($guard)->check() && $guard === 'admin') { return redirect(RouteServiceProvider::ADMIN_HOME); } return $next($request); }
コメント