この記事では、Laravel 5.6 の複数認証について説明します。ここでの複数認証は、複数のユーザー モデルに対して認証を行うプロセスにすぎません。
#次のセクションでは、Laravel の組み込み認証機能を説明します。具体的には、管理者ユーザーと通常ユーザーの両方を認証する方法を説明します。
ステップ 1: Laravel のセットアップ
composer を使用して Laravel プロジェクトをセットアップします。
composer create-project --prefer-dist laravel/laravel project-name
ステップ 2: データベース構成
.env ファイルを開き、ファイルにデータベース資格情報を設定します。
DB_DATABASE= database-name DB_USERNAME= root DB_PASSWORD= database-password
ステップ 3: 認証
Laravel の組み込み認証システムを使用して登録してログインするには、次のコマンドを実行するだけです:
php artisan make:auth
ステップ 4: モデルと移行のセットアップ
管理者用のモデルと移行の作成とセットアップ:
php artisan make:model Admin -m
管理者用のモデルをセットアップするには、app/Admin.php に移動します。そして、次のコードでコードを更新します:
/** * Remove 'use Illuminate\Database\Eloquent\Model;' */ use Illuminate\Notifications\Notifiable; use Illuminate\Foundation\Auth\User as Authenticatable; class Admin extends Authenticatable { use Notifiable; // The authentication guard for admin protected $guard = 'admin'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'email', 'password', ]; /** * The attributes that should be hidden for arrays. * * @var array */ protected $hidden = [ 'password', 'remember_token', ];
管理者用の移行テーブルを設定するには、database/migration/***_create_admins_table.php に移動し、次のコードでコードを更新します:
// { Schema::create('admins', function (Blueprint $table) { $table->increments('id'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); }); } //
ステップ 5: 管理者コントローラーのセットアップ
管理者用のコントローラーを作成するには、次のコマンドを実行します。
php artisan make:controller AdminController
コントローラーをセットアップするには、次の場所に移動します。 app/Http/Controllers/AdminController.php を開き、次のコードでコードを更新します:
class AdminController extends Controller{ /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('auth:admin'); } /** * Show the application dashboard. * * @return \Illuminate\Http\Response */ public function index() { return view('admin'); }}
ステップ 6: 管理者ユーザーのログイン コントローラーを設定します
Toログイン コントローラーを作成するには、次のコマンドを実行します。
php artisan make:controller Auth/AdminLoginController
ログイン コントローラーを設定するには、app/Http/Controllers/Auth/AdminLoginController.php に移動し、次のコードでコードを更新します。
use Illuminate\Http\Request;use App\Http\Controllers\Controller;use Illuminate\Foundation\Auth\AuthenticatesUsers;use Illuminate\Support\Facades\Auth;class AdminLoginController extends Controller{ /** * Show the application’s login form. * * @return \Illuminate\Http\Response */ public function showLoginForm() { return view(’auth.admin-login’); } protected function guard(){ return Auth::guard('admin'); } use AuthenticatesUsers; /** * Where to redirect users after login. * * @var string */ protected $redirectTo = '/admin/dashboard'; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest:admin')->except('logout'); }}
ステップ 7: 通常ユーザー用のログイン コントローラーをセットアップする
通常ユーザー用にログイン コントローラーをセットアップするには、app/Http/Controllers/Auth/LoginController.php に移動し、次のコードで更新します。 コード:
///** * Show the application's login form. * * @return \Illuminate\Http\Response */public function showLoginForm(){ return view('auth.login');}//
ステップ 8: 管理者用のログイン ビューを設定する
管理者用のログイン ビューを作成して設定するには、リソース/ビューに移動します。 /auth/ および新しいファイル admin-login.blade.php を作成します。 resource/views/auth/login.blade.php からコードをコピーし、新しいファイルに貼り付けます。
次に、次の内容で新しいファイルを更新します。
// <div class="card-header">{{ __('Admin Login') }}</div> <div class="card-body"> <form method="POST" action="{{ route('admin.login.submit') }}"> //
ステップ 9: 管理者のホーム ビューを設定する
ホーム ビューを作成して設定するには管理者ビューの場合は、resources/views/ に移動し、新しいファイル admin-home.blade.php を作成します。 resource/views/home.blade.php のコードをコピーし、新しいファイルに貼り付けます。
次に、次の内容で新しいファイルを更新します。
// <div class="card"> <div class="card-header">Admin Dashboard</div> //
ステップ 10: Web アプリケーション ルーティングを設定する
アプリケーション用に Web を設定するにはルートの場合は、routes/web.php に移動し、次のコードでコードを更新します。
// Route::get('/', function () { return view('layouts.app'); }); Route::prefix('admin')->group(function() { Route::get('/login', 'Auth\AdminLoginController@showLoginForm')->name('admin.login'); Route::post('/login', 'Auth\AdminLoginController@login')->name('admin.login.submit'); Route::get('/home', 'AdminController@index')->name('admin.home'); }); //
ステップ 11: 例外ハンドラーを設定する
例外を設定するにはハンドラー、app/Exceptions/Hanler.php に移動し、次のコードでコードを更新してください:
// use Illuminate\Auth\AuthenticationException; // // protected $dontReport = [ \Illuminate\Auth\AuthenticationException::class, \Illuminate\Auth\Access\AuthorizationException::class, \Symfony\Component\HttpKernel\Exception\HttpException::class, \Illuminate\Database\Eloquent\ModelNotFoundException::class, \Illuminate\Session\TokenMismatchException::class, \Illuminate\Validation\ValidationException::class, ]; // // public function render($request, Exception $exception) { return parent::render($request, $exception); } /** * Convert an authentication exception into an unauthenticated response. * * @param \Illuminate\Http\Request $request * @param \Illuminate\Auth\AuthenticationException $exception * @return \Illuminate\Http\Response */ protected function unauthenticated($request, AuthenticationException $exception) { if ($request->expectsJson()) { return response()->json(['error' => 'Unauthenticated.'],401); } $guard = array_get($exception->guards(), 0); switch ($guard) { case 'admin': $login = 'admin.login'; break; default: $login = 'login'; break; } return redirect()->guest(route($login)); }
ステップ 12: リダイレクト ミドルウェアをセットアップする
使用する認証後 リダイレクトミドルウェアを設定するには、app/Http/Middleware/RedirectIfAuthenticated.php に移動し、次のコードでコードを更新します。
// public function handle($request, Closure $next, $guard = null) { switch ($guard) { case 'admin' : if (Auth::guard($guard)->check()) { return redirect()->route('admin.home'); } break; default: if (Auth::guard($guard)->check()) { return redirect()->route('home'); } break; } return $next($request); } //
ステップ 13: 認証構成を設定する
認証構成をセットアップするには、config/auth.php に移動し、次のコードでコードを更新します:
// 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ], // // 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], 'admin-api' => [ 'driver' => 'token', 'provider' => 'admins', ], ], // // 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ], ], // // 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], 'admins' => [ 'provider' => 'admins', 'table' => 'password_resets', 'expire' => 15, ], ],
ステップ 14: データベース移行のデフォルトの文字列の長さを設定する
データベース移行のデフォルトの文字列長を設定するには、app/Providers/AppServiceProvider.php に移動し、次のコードでコードを更新します。
use Illuminate\Support\ServiceProvider; use Illuminate\Support\Facades\Schema; // public function boot(){ Schema::defaultStringLength(191); }
ステップ 15:移行
移行を実行するには、次のコマンドを入力します:
php artisan migrate
パッチを使用して管理者ログイン資格情報を入力します:
php artisan tinker $admin = new App\Admin $admin->email = 'admin@app.com' $admin->password = Hash::make(’admin-password’) $admin->save()
これで簡単に設定できるようになりました。 Laravel プロジェクトで複数の ID を確認してください。
以上がLaravel 5.6で複数の認証を設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。