ホームページ >バックエンド開発 >PHPチュートリアル >Laravel 5.2 新機能シリーズ -- マルチユーザー認証機能の詳細な実装
Laravel 5.2 では、マルチユーザー認証のサポートが追加され、異なるデータテーブルユーザー (フロントエンドユーザーとバックエンドユーザーなど) が同時にログインして認証できるようになります。次に、マルチユーザーのログインと登録機能の実装について簡単に紹介します。
まず、Laravel 5.2 が提供する認証スキャフォールディングを使用して初期化作業を完了します:
php artisan make:auth
The Artisanコマンドは、ユーザー認証に必要なルート、ビュー、および HomeController を生成します:
ルーティング ファイル Routes.php を表示すると、ファイルが更新されていることがわかります:
Route::group(['middleware' => 'web'], function () { Route::auth(); Route::get('/home', 'HomeController@index');});
このうち Route ::auth() は登録ログインルートを定義しており、/home は認証通過後のジャンプルートとなっています。
次に、最初にフロントエンド ユーザー ログインを実装します。これは、Laravel に付属する User ユーザー ログインです。上記のスキャフォールディングを通じて、認証に必要なすべてのコードが生成されました。あとは、移行コマンドを使用してユーザー認証関連のテーブルを作成するだけです。
php artisan migrate
コマンドが実行された後、 users テーブルとpassword_resets テーブルが生成され、それぞれユーザー マスター テーブルとパスワード リセット テーブルが生成されます。
次に、ブラウザに http://laravel.app/register と入力して新しいユーザーを登録します。
登録が成功した後、 test という名前のユーザーを作成します。 http://laravel.app/home と入力すると、ログインしていることがわかります:
マルチユーザー認証を実装するには、まず認証構成ファイル auth.php を構成する必要があります。ここで実装する機能はフロントエンドとバックエンドのユーザー ログインであるため、対応する構成は次のとおりです:
<?phpreturn [ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ], ], 'passwords' => [ 'users' => [ 'provider' => 'users', 'email' => 'auth.emails.password', 'table' => 'password_resets', 'expire' => 60, ], ],];
認証はガードとプロバイダーで構成されているため (ユーザー認証ドキュメントを参照)、これら 2 つの設定項目にそれぞれ admin および admins オプションを追加しました。
次に、バックグラウンド ユーザー ログインを実装します。まず、次の Artisan コマンドを使用してバックグラウンド ユーザー モデルを生成します。
php artisan make:model Admin --migration--migration オプションを使用すると、対応するユーザー テーブル管理者が生成されます。このデータ テーブルのフィールドがユーザーと同じになるように定義します。
Schema::create('admins', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('email')->unique(); $table->string('password', 60); $table->rememberToken(); $table->timestamps();});次に、次のコマンドを実行してテーブルを生成します。移行コマンド:
php artisan migrate次に、Admin モデル クラスを次のように更新します。
<?phpnamespace App;use Illuminate\Foundation\Auth\User as Authenticatable;class Admin extends Authenticatable{ /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; /** * The attributes excluded from the model's JSON form. * * @var array */ protected $hidden = [ 'password', 'remember_token', ];}
Route::group(['middleware' => ['web']], function () { Route::auth(); Route::get('home', 'HomeController@index'); Route::get('admin/login', 'Admin\AuthController@getLogin'); Route::post('admin/login', 'Admin\AuthController@postLogin'); Route::get('admin/register', 'Admin\AuthController@getRegister'); Route::post('admin/register', 'Admin\AuthController@postRegister'); Route::get('admin', 'AdminController@index');});次に、Artisan コマンドを使用して、対応するコントローラーを作成します。
php artisan make:controller Admin/AuthControllerphp artisan make:controller AdminControllerEdit Admin /AuthController.php コードを次のように編集します。
<?phpnamespace App\Http\Controllers\Admin;use App\Admin;use Validator;use App\Http\Controllers\Controller;use Illuminate\Foundation\Auth\ThrottlesLogins;use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;class AuthController extends Controller{ use AuthenticatesAndRegistersUsers, ThrottlesLogins; protected $redirectTo = '/admin'; protected $guard = 'admin'; protected $loginView = 'admin.login'; protected $registerView = 'admin.register'; public function __construct() { $this->middleware('guest:admin', ['except' => 'logout']); } protected function validator(array $data) { return Validator::make($data, [ 'name' => 'required|max:255', 'email' => 'required|email|max:255|unique:admins', 'password' => 'required|confirmed|min:6', ]); } protected function create(array $data) { return Admin::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); }}AdminController.php コードを次のように編集します。
<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use App\Http\Requests;use App\Http\Controllers\Controller;use Auth;class AdminController extends Controller{ public function __construct() { $this->middleware('auth:admin'); } public function index() { $admin = Auth::guard('admin')->user(); return $admin->name; }}
cp -r resources/views/auth resources/views/adminログインと登録を変更します。 resource/views/admin ディレクトリの下のフォーム送信アドレス:
/login -> /admin/login/register -> /admin/register
1 つ登録する ユーザー名 admin のユーザーが登録に成功すると、ページは http://laravel.app にジャンプします/admin、認証が成功したことを示します。
これで表ユーザーと裏ユーザーの同時ログイン認証機能が完成しました。