サーチ…


マルチ認証

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.phpdefaults配列で指定されています。新鮮なララベルでは、それは "ウェブ"です。

コントローラでは、カスタムビューパスを表示するために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(...)


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow