Laravel入門トップページ


目次

  1. Composerのダウンロードとインストール
  2. コメント掲示板を作成してみよう
  3. リレーションシップを使いこなそう
  4. ユーザ認証の機能を実現しよう
  5. マルチ認証の機能を実現しよう
    1. 概要と準備
    2. デフォルト認証ガードの変更
    3. adminとprofessorを追加
    4. ログイン機能の実装
  6. MongoDB に接続しよう
  7. キューを利用しよう
  8. コマンド(コンソール)を利用しよう
  9. 本番環境にデプロイしよう

マルチ認証の機能を実現しよう

admin と professor を追加

admin と professor を追加してマルチ認証を実装しよう.

目次に戻る

設定ファイルの編集

設定ファイルを編集して,admin と professor の項目を追加する.このとき,単数形と複数形の使い方に注意すること.

config/auth.php
  1. <?php
  2.  
  3. return [
  4.  
  5. /*
  6. |--------------------------------------------------------------------------
  7. | Authentication Defaults
  8. |--------------------------------------------------------------------------
  9. |
  10. | This option controls the default authentication "guard" and password
  11. | reset options for your application. You may change these defaults
  12. | as required, but they're a perfect start for most applications.
  13. |
  14. */
  15.  
  16. 'defaults' => [
  17. 'guard' => 'user',
  18. 'passwords' => 'users',
  19. ],
  20.  
  21. /*
  22. |--------------------------------------------------------------------------
  23. | Authentication Guards
  24. |--------------------------------------------------------------------------
  25. |
  26. | Next, you may define every authentication guard for your application.
  27. | Of course, a great default configuration has been defined for you
  28. | here which uses session storage and the Eloquent user provider.
  29. |
  30. | All authentication drivers have a user provider. This defines how the
  31. | users are actually retrieved out of your database or other storage
  32. | mechanisms used by this application to persist your user's data.
  33. |
  34. | Supported: "session", "token"
  35. |
  36. */
  37.  
  38. 'guards' => [
  39. 'web' => [
  40. 'driver' => 'session',
  41. 'provider' => 'users',
  42. ],
  43.  
  44. 'api' => [
  45. 'driver' => 'token',
  46. 'provider' => 'users',
  47. ],
  48.  
  49. 'user' => [
  50. 'driver' => 'session',
  51. 'provider' => 'users',
  52. ],
  53.  
  54. 'professor' => [
  55. 'driver' => 'session',
  56. 'provider' => 'professors',
  57. ],
  58.  
  59. 'admin' => [
  60. 'driver' => 'session',
  61. 'provider' => 'admins',
  62. ],
  63. ],
  64.  
  65. /*
  66. |--------------------------------------------------------------------------
  67. | User Providers
  68. |--------------------------------------------------------------------------
  69. |
  70. | All authentication drivers have a user provider. This defines how the
  71. | users are actually retrieved out of your database or other storage
  72. | mechanisms used by this application to persist your user's data.
  73. |
  74. | If you have multiple user tables or models you may configure multiple
  75. | sources which represent each model / table. These sources may then
  76. | be assigned to any extra authentication guards you have defined.
  77. |
  78. | Supported: "database", "eloquent"
  79. |
  80. */
  81.  
  82. 'providers' => [
  83. 'users' => [
  84. 'driver' => 'eloquent',
  85. 'model' => App\User::class,
  86. ],
  87. 'professors' => [
  88. 'driver' => 'eloquent',
  89. 'model' => App\Professor::class,
  90. ],
  91. 'admins' => [
  92. 'driver' => 'eloquent',
  93. 'model' => App\Admin::class,
  94. ],
  95. // 'users' => [
  96. // 'driver' => 'database',
  97. // 'table' => 'users',
  98. // ],
  99. ],
  100.  
  101. /*
  102. |--------------------------------------------------------------------------
  103. | Resetting Passwords
  104. |--------------------------------------------------------------------------
  105. |
  106. | You may specify multiple password reset configurations if you have more
  107. | than one user table or model in the application and you want to have
  108. | separate password reset settings based on the specific user types.
  109. |
  110. | The expire time is the number of minutes that the reset token should be
  111. | considered valid. This security feature keeps tokens short-lived so
  112. | they have less time to be guessed. You may change this as needed.
  113. |
  114. */
  115.  
  116. 'passwords' => [
  117. 'users' => [
  118. 'provider' => 'users',
  119. 'table' => 'password_resets',
  120. 'expire' => 60,
  121. ],
  122. 'professors' => [
  123. 'provider' => 'professors',
  124. 'table' => 'password_resets',
  125. 'expire' => 60,
  126. ],
  127. 'admins' => [
  128. 'provider' => 'admins',
  129. 'table' => 'password_resets',
  130. 'expire' => 60,
  131. ],
  132. ],
  133.  
  134. ];

目次に戻る

ログイン画面のリダイレクト先を変更

admin と professor のログイン画面へのリダイレクト先を変更する.(Laravel 5.7 では app/Http/Middleware/Authenticate.php に記述するようになりました.詳細は後日公開します.)

app/Exceptions/Handler.php
  1. <?php
  2.  
  3. namespace App\Exceptions;
  4.  
  5. use Exception;
  6. use Illuminate\Auth\AuthenticationException;
  7. use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
  8.  
  9. class Handler extends ExceptionHandler
  10. {
  11. /**
  12. * A list of the exception types that should not be reported.
  13. *
  14. * @var array
  15. */
  16. protected $dontReport = [
  17. \Illuminate\Auth\AuthenticationException::class,
  18. \Illuminate\Auth\Access\AuthorizationException::class,
  19. \Symfony\Component\HttpKernel\Exception\HttpException::class,
  20. \Illuminate\Database\Eloquent\ModelNotFoundException::class,
  21. \Illuminate\Session\TokenMismatchException::class,
  22. \Illuminate\Validation\ValidationException::class,
  23. ];
  24.  
  25. /**
  26. * Report or log an exception.
  27. *
  28. * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
  29. *
  30. * @param \Exception $exception
  31. * @return void
  32. */
  33. public function report(Exception $exception)
  34. {
  35. parent::report($exception);
  36. }
  37.  
  38. /**
  39. * Render an exception into an HTTP response.
  40. *
  41. * @param \Illuminate\Http\Request $request
  42. * @param \Exception $exception
  43. * @return \Illuminate\Http\Response
  44. */
  45. public function render($request, Exception $exception)
  46. {
  47. return parent::render($request, $exception);
  48. }
  49.  
  50. /**
  51. * Convert an authentication exception into an unauthenticated response.
  52. *
  53. * @param \Illuminate\Http\Request $request
  54. * @param \Illuminate\Auth\AuthenticationException $exception
  55. * @return \Illuminate\Http\Response
  56. */
  57. protected function unauthenticated($request, AuthenticationException $exception)
  58. {
  59. if ($request->expectsJson()) {
  60. return response()->json(['error' => 'Unauthenticated.'], 401);
  61. }
  62. if (in_array('admin', $exception->guards(), true)) {
  63. return redirect()->guest(route('admin.login'));
  64. }
  65. if (in_array('professor', $exception->guards(), true)) {
  66. return redirect()->guest(route('professor.login'));
  67. }
  68.  
  69. return redirect()->guest(route('login'));
  70. }
  71. }

目次に戻る

モデルを生成

artisan コマンドで Admin と Professor モデルを生成する.

[GakuinHana@rin06 laravelUser]$ php artisan make:model Admin ⏎
Model created successfully.
[GakuinHana@rin06 laravelUser]$ php artisan make:model Professor ⏎
Model created successfully.
[GakuinHana@rin06 laravelUser]$

目次に戻る

データベースの設定

マイグレーションファイルを生成する.

[GakuinHana@rin06 laravelUser]$ php artisan make:migration create_admins_table --create=admins ⏎
Created Migration: 2018_07_07_152520_create_admins_table
[GakuinHana@rin06 laravelUser]$ php artisan make:migration create_professors_table --create=professors ⏎
Created Migration: 2018_07_07_152539_create_professors_table
[GakuinHana@rin06 laravelUser]$

生成されたマイグレーションファイルを編集する.

database/migrations/20xx_xx_x_xxxxxx_create_admins_table.php
  1. <?php
  2.  
  3. use Illuminate\Support\Facades\Schema;
  4. use Illuminate\Database\Schema\Blueprint;
  5. use Illuminate\Database\Migrations\Migration;
  6.  
  7. class CreateAdminsTable extends Migration
  8. {
  9. /**
  10. * Run the migrations.
  11. *
  12. * @return void
  13. */
  14. public function up()
  15. {
  16. Schema::create('admins', function (Blueprint $table) {
  17. $table->increments('id');
  18. $table->string('name');
  19. $table->string('email')->unique();
  20. $table->string('login_id')->unique();
  21. $table->string('password');
  22. $table->rememberToken();
  23. $table->timestamps();
  24. });
  25. }
  26.  
  27. /**
  28. * Reverse the migrations.
  29. *
  30. * @return void
  31. */
  32. public function down()
  33. {
  34. Schema::dropIfExists('admins');
  35. }
  36. }
database/migrations/20xx_xx_xx_xxxxxx_create_professors_table.php
  1. <?php
  2.  
  3. use Illuminate\Support\Facades\Schema;
  4. use Illuminate\Database\Schema\Blueprint;
  5. use Illuminate\Database\Migrations\Migration;
  6.  
  7. class CreateProfessorsTable extends Migration
  8. {
  9. /**
  10. * Run the migrations.
  11. *
  12. * @return void
  13. */
  14. public function up()
  15. {
  16. Schema::create('professors', function (Blueprint $table) {
  17. $table->increments('id');
  18. $table->string('name');
  19. $table->string('email')->unique();
  20. $table->string('login_id')->unique();
  21. $table->string('password');
  22. $table->rememberToken();
  23. $table->timestamps();
  24. });
  25. }
  26.  
  27. /**
  28. * Reverse the migrations.
  29. *
  30. * @return void
  31. */
  32. public function down()
  33. {
  34. Schema::dropIfExists('professors');
  35. }
  36. }

マイグレーションを実行する.

[GakuinHana@rin06 laravelUser]$ php artisan migrate:status ⏎
+------+------------------------------------------------+
| Ran? | Migration                                      |
+------+------------------------------------------------+
| Y    | 2014_10_12_000000_create_users_table           |
| Y    | 2014_10_12_100000_create_password_resets_table |
| Y    | 2018_07_01_163318_create_jobs_table            |
| Y    | 2018_07_01_163336_create_failed_jobs_table     |
| N    | 2018_07_07_152520_create_admins_table          |
| N    | 2018_07_07_152539_create_professors_table      |
+------+------------------------------------------------+
[GakuinHana@rin06 laravelUser]$ php artisan migrate ⏎
Migrating: 2018_07_07_152520_create_admins_table
Migrated:  2018_07_07_152520_create_admins_table
Migrating: 2018_07_07_152539_create_professors_table
Migrated:  2018_07_07_152539_create_professors_table
[GakuinHana@rin06 laravelUser]$ php artisan migrate:status ⏎
+------+------------------------------------------------+
| Ran? | Migration                                      |
+------+------------------------------------------------+
| Y    | 2014_10_12_000000_create_users_table           |
| Y    | 2014_10_12_100000_create_password_resets_table |
| Y    | 2018_07_01_163318_create_jobs_table            |
| Y    | 2018_07_01_163336_create_failed_jobs_table     |
| Y    | 2018_07_07_152520_create_admins_table          |
| Y    | 2018_07_07_152539_create_professors_table      |
+------+------------------------------------------------+
[GakuinHana@rin06 laravelUser]$

テスト用のシーダーを生成する.

[GakuinHana@rin06 laravelUser]$ php artisan make:seeder AdminsTableSeeder ⏎
Seeder created successfully.
[GakuinHana@rin06 laravelUser]$ php artisan make:seeder ProfessorsTableSeeder ⏎
Seeder created successfully.
[GakuinHana@rin06 laravelUser]$

シーダーにテストデータを追加する.

database/seeds/DatabaseSeeder.php
  1. <?php
  2.  
  3. use Illuminate\Database\Seeder;
  4.  
  5. class DatabaseSeeder extends Seeder
  6. {
  7. /**
  8. * Run the database seeds.
  9. *
  10. * @return void
  11. */
  12. public function run()
  13. {
  14. $this->call(UsersTableSeeder::class);
  15. $this->call(AdminsTableSeeder::class);
  16. $this->call(ProfessorsTableSeeder::class);
  17. }
  18. }
database/seeds/AdminsTableSeeder.php
  1. <?php
  2.  
  3. use Illuminate\Database\Seeder;
  4.  
  5. use App\Admin;
  6. use Carbon\Carbon;
  7.  
  8. class AdminsTableSeeder extends Seeder
  9. {
  10. /**
  11. * Run the database seeds.
  12. *
  13. * @return void
  14. */
  15. public function run()
  16. {
  17. DB::table('admins')->delete();
  18.  
  19. Admin::create([
  20. 'name' => 'Taro Admin',
  21. 'email' => 'taro@sample.com',
  22. 'login_id' => 'taro',
  23. 'password' => bcrypt('admin'),
  24. 'created_at' => Carbon::now()
  25. ]);
  26.  
  27. Admin::create([
  28. 'name' => 'Jiro Admin',
  29. 'email' => 'jiro@sample.com',
  30. 'login_id' => 'jiro',
  31. 'password' => bcrypt('admin'),
  32. 'created_at' => Carbon::now()
  33. ]);
  34. }
  35. }
database/seeds/ProfessorsTableSeeder.php
  1. <?php
  2.  
  3. use Illuminate\Database\Seeder;
  4.  
  5. use App\Professor;
  6. use Carbon\Carbon;
  7.  
  8. class ProfessorsTableSeeder extends Seeder
  9. {
  10. /**
  11. * Run the database seeds.
  12. *
  13. * @return void
  14. */
  15. public function run()
  16. {
  17. DB::table('professors')->delete();
  18.  
  19. Professor::create([
  20. 'name' => 'Tama',
  21. 'email' => 'tama@sample.com',
  22. 'login_id' => 'tama',
  23. 'password' => bcrypt('professor'),
  24. 'created_at' => Carbon::now()
  25. ]);
  26.  
  27. Professor::create([
  28. 'name' => 'Pochi',
  29. 'email' => 'poch@sample.com',
  30. 'login_id' => 'pochi',
  31. 'password' => bcrypt('professor'),
  32. 'created_at' => Carbon::now()
  33. ]);
  34. }
  35. }

シーダーを実行する.まずは dump-autoload を実行しなければエラーになるはず.

[GakuinHana@rin06 laravelUser]$ php ../composer.phar dump-autoload ⏎
Generating optimized autoload files
[GakuinHana@rin06 laravelUser]$ php artisan db:seed ⏎
Seeding: UsersTableSeeder
Seeding: AdminsTableSeeder
Seeding: ProfessorsTableSeeder
[GakuinHana@rin06 laravelUser]$

目次に戻る

コントローラの作成

app/Http/Controllers/ 以下に Admin と Professor というフォルダを作成する.その後,artisan コマンドでコントローラを生成する.

[GakuinHana@rin06 laravelUser]$ mkdir app/Http/Controllers/Admin ⏎
[GakuinHana@rin06 laravelUser]$ mkdir app/Http/Controllers/Professor ⏎
[GakuinHana@rin06 laravelUser]$ php artisan make:controller Admin/LoginController ⏎
Controller created successfully.
[GakuinHana@rin06 laravelUser]$ php artisan make:controller Admin/HomeController ⏎
Controller created successfully.
[GakuinHana@rin06 laravelUser]$ php artisan make:controller Professor/LoginController ⏎
Controller created successfully.
[GakuinHana@rin06 laravelUser]$ php artisan make:controller Professor/HomeController ⏎
Controller created successfully.
[GakuinHana@rin06 laravelUser]$

目次に戻る

ルートの定義

それぞれの認証クラスでのルートを定義する.なお,'prefix' => 'admin' は URL の先頭に admin がつく,すなわち,「login」の URL は「/admin/login」となることを意味している.また,Route::group の中で middleware を定義しているので,コントローラで明示的に middleware を呼び出さなくてもコントローラですべての処理に認証が要求される(ただし,このあとの例では念の為,コントローラでも middleware を呼び出している).

routes/web.php
  1. <?php
  2.  
  3. /*
  4. |--------------------------------------------------------------------------
  5. | Web Routes
  6. |--------------------------------------------------------------------------
  7. |
  8. | Here is where you can register web routes for your application. These
  9. | routes are loaded by the RouteServiceProvider within a group which
  10. | contains the "web" middleware group. Now create something great!
  11. |
  12. */
  13.  
  14. Route::get('/', function () {
  15. return view('welcome');
  16. });
  17.  
  18. Route::get('/auth/verifyemail/{token}', 'Auth\RegisterController@verify');
  19.  
  20. Auth::routes();
  21. Route::get('/resend', 'Auth\RegisterController@showReSendForm')->name('resend');
  22. Route::post('/resend', 'Auth\RegisterController@reSend');
  23. Route::get('/password/change', 'Auth\ChangePasswordController@edit');
  24. Route::patch('/password/change','Auth\ChangePasswordController@update')->name('password.change');
  25.  
  26. // User ログイン後
  27. Route::group(['middleware' => 'auth:user'], function() {
  28. Route::get('/home', 'HomeController@index')->name('home');
  29. Route::get('/users/{id}', 'UsersController@show');
  30. });
  31.  
  32. // Admin 認証不要
  33. Route::group(['prefix' => 'admin'], function() {
  34. Route::get('login', 'Admin\LoginController@showLoginForm')->name('admin.login');
  35. Route::post('login', 'Admin\LoginController@login');
  36. });
  37.  
  38. // Admin ログイン後
  39. Route::group(['prefix' => 'admin', 'middleware' => 'auth:admin'], function() {
  40. Route::get('home', 'Admin\HomeController@index')->name('admin.home');
  41. Route::post('logout', 'Admin\LoginController@logout')->name('admin.logout');
  42. });
  43.  
  44. // Professor 認証不要
  45. Route::group(['prefix' => 'professor'], function() {
  46. Route::get('login', 'Professor\LoginController@showLoginForm')->name('professor.login');
  47. Route::post('login', 'Professor\LoginController@login');
  48. });
  49.  
  50. // Professor ログイン後
  51. Route::group(['prefix' => 'professor', 'middleware' => 'auth:professor'], function() {
  52. Route::get('home', 'Professor\HomeController@index')->name('professor.home');
  53. Route::post('logout', 'Professor\LoginController@logout')->name('professor.logout');
  54. });

artisan コマンドでルートの定義を確認しておこう.

[GakuinHana@rin06 laravelUser]$ php artisan route:list ⏎
+--------+----------+--------------------------+------------------+------------------------------------------------------------------------+--------------------+
| Domain | Method   | URI                      | Name             | Action                                                                 | Middleware         |
+--------+----------+--------------------------+------------------+------------------------------------------------------------------------+--------------------+
|        | GET|HEAD | /                        |                  | Closure                                                                | web                |
|        | GET|HEAD | admin/home               | admin.home       | App\Http\Controllers\Admin\HomeController@index                        | web,auth:admin     |
|        | POST     | admin/login              |                  | App\Http\Controllers\Admin\LoginController@login                       | web                |
|        | GET|HEAD | admin/login              | admin.login      | App\Http\Controllers\Admin\LoginController@showLoginForm               | web                |
|        | POST     | admin/logout             | admin.logout     | App\Http\Controllers\Admin\LoginController@logout                      | web,auth:admin     |
|        | GET|HEAD | api/user                 |                  | Closure                                                                | api,auth:api       |
|        | GET|HEAD | auth/verifyemail/{token} |                  | App\Http\Controllers\Auth\RegisterController@verify                    | web,guest          |
|        | GET|HEAD | home                     | home             | App\Http\Controllers\HomeController@index                              | web,auth:user,auth |
|        | GET|HEAD | login                    | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest          |
|        | POST     | login                    |                  | App\Http\Controllers\Auth\LoginController@login                        | web,guest          |
|        | POST     | logout                   | logout           | App\Http\Controllers\Auth\LoginController@logout                       | web                |
|        | GET|HEAD | password/change          |                  | App\Http\Controllers\Auth\ChangePasswordController@edit                | web,auth           |
|        | PATCH    | password/change          | password.change  | App\Http\Controllers\Auth\ChangePasswordController@update              | web,auth           |
|        | POST     | password/email           | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web,guest          |
|        | POST     | password/reset           |                  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web,guest          |
|        | GET|HEAD | password/reset           | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest          |
|        | GET|HEAD | password/reset/{token}   | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web,guest          |
|        | GET|HEAD | professor/home           | professor.home   | App\Http\Controllers\Professor\HomeController@index                    | web,auth:professor |
|        | GET|HEAD | professor/login          | professor.login  | App\Http\Controllers\Professor\LoginController@showLoginForm           | web                |
|        | POST     | professor/login          |                  | App\Http\Controllers\Professor\LoginController@login                   | web                |
|        | POST     | professor/logout         | professor.logout | App\Http\Controllers\Professor\LoginController@logout                  | web,auth:professor |
|        | GET|HEAD | register                 | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest          |
|        | POST     | register                 |                  | App\Http\Controllers\Auth\RegisterController@register                  | web,guest          |
|        | GET|HEAD | resend                   | resend           | App\Http\Controllers\Auth\RegisterController@showReSendForm            | web,guest          |
|        | POST     | resend                   |                  | App\Http\Controllers\Auth\RegisterController@reSend                    | web,guest          |
|        | GET|HEAD | users/{id}               |                  | App\Http\Controllers\UsersController@show                              | web,auth:user,auth |
+--------+----------+--------------------------+------------------+------------------------------------------------------------------------+--------------------+
[GakuinHana@rin06 laravelUser]$

目次に戻る

モデルを編集する

生成されたモデルを編集する.(同じフォルダにある User.php をコピーして一部修正しても良い.)

app/Admin.php
  1. <?php
  2.  
  3. namespace App;
  4.  
  5. use Illuminate\Notifications\Notifiable;
  6. use Illuminate\Foundation\Auth\User as Authenticatable;
  7.  
  8. class Admin extends Authenticatable
  9. {
  10. use Notifiable;
  11.  
  12. /**
  13. * The attributes that are mass assignable.
  14. *
  15. * @var array
  16. */
  17. protected $fillable = [
  18. 'name', 'email', 'password',
  19. ];
  20.  
  21. /**
  22. * The attributes that should be hidden for arrays.
  23. *
  24. * @var array
  25. */
  26. protected $hidden = [
  27. 'password', 'remember_token',
  28. ];
  29. }
app/Professor.php
  1. <?php
  2.  
  3. namespace App;
  4.  
  5. use Illuminate\Notifications\Notifiable;
  6. use Illuminate\Foundation\Auth\User as Authenticatable;
  7.  
  8. class Professor extends Authenticatable
  9. {
  10. use Notifiable;
  11.  
  12. /**
  13. * The attributes that are mass assignable.
  14. *
  15. * @var array
  16. */
  17. protected $fillable = [
  18. 'name', 'email', 'password',
  19. ];
  20.  
  21. /**
  22. * The attributes that should be hidden for arrays.
  23. *
  24. * @var array
  25. */
  26. protected $hidden = [
  27. 'password', 'remember_token',
  28. ];
  29. }

目次に戻る

コントローラを編集する

ルートに定義した関数をコントローラに設置する.とりあえず雛形だけ.

app/Http/Controllers/Admin/LoginController.php
  1. <?php
  2.  
  3. namespace App\Http\Controllers\Admin;
  4.  
  5. use Illuminate\Foundation\Auth\AuthenticatesUsers; // 追加 (app/Http/Controllers/Auth/LoginController.php からコピーすれば良い)
  6. use Illuminate\Http\Request;
  7. use App\Http\Controllers\Controller;
  8. use Illuminate\Support\Facades\Auth;
  9.  
  10. class LoginController extends Controller
  11. {
  12. /*
  13. |--------------------------------------------------------------------------
  14. | Login Controller
  15. |--------------------------------------------------------------------------
  16. |
  17. | This controller handles authenticating users for the application and
  18. | redirecting them to your home screen. The controller uses a trait
  19. | to conveniently provide its functionality to your applications.
  20. |
  21. */
  22.  
  23. use AuthenticatesUsers;
  24.  
  25. /**
  26. * Where to redirect users after login.
  27. *
  28. * @var string
  29. */
  30. protected $redirectTo = '/admin/home';
  31.  
  32. /**
  33. * Create a new controller instance.
  34. *
  35. * @return void
  36. */
  37. public function __construct()
  38. {
  39. $this->middleware('guest:admin')->except('logout');
  40. }
  41.  
  42. public function showLoginForm()
  43. {
  44. dd("admin.showLoginForm");
  45. }
  46.  
  47. protected function guard()
  48. {
  49. return Auth::guard('admin');
  50. }
  51.  
  52. public function logout(Request $request)
  53. {
  54. $this->guard('admin')->logout();
  55. $request->session()->invalidate();
  56. return redirect('/admin/login');
  57. }
  58.  
  59. public function username()
  60. {
  61. return 'login_id';
  62. }
  63. }
app/Http/Controllers/Admin/HomeController.php
  1. <?php
  2.  
  3. namespace App\Http\Controllers\Admin;
  4.  
  5. use Illuminate\Http\Request;
  6. use App\Http\Controllers\Controller;
  7.  
  8. class HomeController extends Controller
  9. {
  10. /**
  11. * Create a new controller instance.
  12. *
  13. * @return void
  14. */
  15. public function __construct()
  16. {
  17. $this->middleware('auth:admin');
  18. }
  19.  
  20. /**
  21. * Show the application dashboard.
  22. *
  23. * @return \Illuminate\Http\Response
  24. */
  25. public function index()
  26. {
  27. dd("admin.index");
  28. }
  29. }
app/Http/Controllers/Professor/LoginController.php
  1. <?php
  2.  
  3. namespace App\Http\Controllers\Professor;
  4.  
  5. use Illuminate\Foundation\Auth\AuthenticatesUsers; // 追加 (app/Http/Controllers/Auth/LoginController.php からコピーすれば良い)
  6. use Illuminate\Http\Request;
  7. use App\Http\Controllers\Controller;
  8. use Illuminate\Support\Facades\Auth;
  9.  
  10. class LoginController extends Controller
  11. {
  12. /*
  13. |--------------------------------------------------------------------------
  14. | Login Controller
  15. |--------------------------------------------------------------------------
  16. |
  17. | This controller handles authenticating users for the application and
  18. | redirecting them to your home screen. The controller uses a trait
  19. | to conveniently provide its functionality to your applications.
  20. |
  21. */
  22.  
  23. use AuthenticatesUsers;
  24.  
  25. /**
  26. * Where to redirect users after login.
  27. *
  28. * @var string
  29. */
  30. protected $redirectTo = '/professor/home';
  31.  
  32. /**
  33. * Create a new controller instance.
  34. *
  35. * @return void
  36. */
  37. public function __construct()
  38. {
  39. $this->middleware('guest:professor')->except('logout');
  40. }
  41.  
  42. public function showLoginForm()
  43. {
  44. dd("professor.showLoginForm");
  45. }
  46.  
  47. protected function guard()
  48. {
  49. return Auth::guard('professor');
  50. }
  51.  
  52. public function logout(Request $request)
  53. {
  54. Auth::gurad('professor')->logout();
  55. $request->session()->flush();
  56. $request->session()->regenerate();
  57. return redirect('/professor/login');
  58. }
  59.  
  60. public function username()
  61. {
  62. return 'login_id';
  63. }
  64. }
app/Http/Controllers/Professor/HomeController.php
  1. <?php
  2.  
  3. namespace App\Http\Controllers\Professor;
  4.  
  5. use Illuminate\Http\Request;
  6. use App\Http\Controllers\Controller;
  7.  
  8. class HomeController extends Controller
  9. {
  10. /**
  11. * Create a new controller instance.
  12. *
  13. * @return void
  14. */
  15. public function __construct()
  16. {
  17. $this->middleware('auth:professor');
  18. }
  19.  
  20. /**
  21. * Show the application dashboard.
  22. *
  23. * @return \Illuminate\Http\Response
  24. */
  25. public function index()
  26. {
  27. dd("professor.index");
  28. }
  29. }

目次に戻る

ここで動作を確認する

ここで一旦動作を確認してみよう.Webサーバを再起動し,ログアウトした状態で /admin/home や /professor/home にアクセスすると,それぞれ /admin/login や /professor/login に転送されることが確認できるはずである.また,一般ユーザ (user) でログインしている状態でも /admin/home や /professor/home にアクセスするとやはりログイン画面に転送される.


目次に戻る