サーチ…
マルチ認証
Laravelでは、特定のガードに複数の認証タイプを使用できます。
laravel 5.3では複数の認証がLaravel 5.2と少し異なります
私は5.3でmultiauthentication機能を実装する方法を説明します
まず、2つの異なるユーザーモデルが必要です
cp App/User.php App/Admin.php
クラス名をAdminに変更し、異なるモデルを使用する場合は名前空間を設定します。それはのようになります
App \ Admin.php
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class Admin extends Authenticatable
{
use Notifiable;
protected $fillable = ['name', 'email', 'password'];
protected $hidden = ['password', 'remember_token'];
}
また、管理者用の移行を作成する必要があります
php artisan make:migration create_admins_table
デフォルトのユーザー移行の内容を含む移行ファイルを編集します。このように見える
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateAdminsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('admins', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->rememberToken();
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('admins');
}
}
edit config / auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
//Add Admin Guard
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
そして
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
//Add Admins Provider
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
2つのエントリを追加することに注意してください。 1つはガード変数の中の1つはプロバイダー変数です。
そして、これはあなたが他のガードを使用して "web"
私のApp \ Http \ Controllers \ Admin \ LoginController
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
class AuthController extends Controller
{
use AuthenticatesUsers;
protected $guard = 'admin';
protected $redirectTo = '/admin/';
public function showLoginForm()
{
return view('admin.login');
}
protected function guard()
{
return Auth::guard($this->guard);
}
}
これはほとんど説明が必要ありません。
Auth :: guard( 'admin')は管理者ガードに認証方法(ログイン、ログアウト、登録など)を使用できるようにします。
例えば
Auth::guard('admin')->login($user)
adminsテーブルの$ userを検索し、その間にユーザーとログインします
Auth::login($user)
usersテーブルで正常に動作します。デフォルトガードはconfig / auth.phpでdefaults配列で指定されています。新鮮なララベルでは、それは "ウェブ"です。
コントローラでは、カスタムビューパスを表示するためにAuthenticatesUsersからメソッドを実装する必要があります。そして、あなたの新しいユーザーガードを使用するためにガードのような他の機能を実装する必要があります。
この例では、管理者ログインはadmin / login.bladeです
そして、 Auth :: guard( 'admin')を返すためのguard()関数を実装することによって、すべてのAuthenticatesUsers traitメソッドが "admin"ガードで動作します。
以前のバージョンのlaravelでは、5.3とほとんど違いがありません
5.2のgetGuard関数はクラスとmain関数(ログイン)から$ guard変数を返します。
Auth::guard($guard)->attempt(...)
5.3ガード関数は、Auth :: guard()全体を返し、main関数はそれを好きなように使います
$this->guard()->attempt(...)