多重认证

Laravel 允许你使用具有特定防护的多种身份验证类型。

在 laravel 5.3 中,多重身份验证与 Laravel 5.2 略有不同

我将解释如何在 5.3 中实现多重身份验证功能

首先,你需要两个不同的用户模型

cp App/User.php App/Admin.php

如果你使用不同的模型,请将类名更改为 Admin 并设置名称空间。它应该看起来像

应用程序\ 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');
    }
}

编辑 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,
        ],
    ],

请注意,我们添加了两个条目。一个在后卫变量之一提供商变量。

这就是你如何使用其他后卫然后网络

我的 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 方法(例如登录,注销,注册等)与你的管理员保护。

例如

Auth::guard('admin')->login($user)

将在 admins 表中搜索$ user 并与用户一起登录

Auth::login($user)

将与用户表正常工作。默认保护在 config / auth.php 中使用 defaults 数组指定。在新鲜的 laravel 它是 web

在控制器中,你必须实现 AuthenticatesUsers 中的方法以显示自定义视图路径。并且你需要实现其他功能,例如 guard 以使用你的新用户警卫。

在此示例中,我的管理员登录名为 admin / login.blade

通过实现 guard() 函数返回 **Auth::guard(‘admin’),**所有 AuthenticatesUsers 特征方法都与 admin 后卫一起使用。

在早期版本的 laravel 中,这与 5.3 略有不同

在 5.2 中 getGuard 函数从类返回$ guard 变量并且 main 函数(login)使用它

Auth::guard($guard)->attempt(...)

在 5.3 保护函数中返回整个 Auth :: guard() 和 main 函数使用它

$this->guard()->attempt(...)