文書の過去の版を表示しています。
- 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
- <?php
- use Illuminate\Database\Seeder;
- class DatabaseSeeder extends Seeder
- {
- 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);
- }
コメント