多身份验证使用一个表格 Laravel 5.4

7 浏览
0 Comments

多身份验证使用一个表格 Laravel 5.4

我想使用多认证的Laravel,但只使用一个表格“users”\n我应该如何实现这个功能?

0
0 Comments

问题的原因:在Laravel 5.4中,使用一个表进行多身份验证(Multi auth)时,需要分别为每种类型的用户创建不同的驱动程序和模型。然而,如果想要快速实现而不考虑安全性和可扩展性,可以采取以下方法。

解决方法:可以在用户的迁移中添加一个标志(flag)来确定用户的类型,然后创建一个中间件来检查用户是否具有所需的'user_type'标志。在这个例子中,我们将创建两个中间件,一个用于普通用户,另一个用于管理员。我们在Kernel.php文件中注册这两个中间件,并在每个中间件的handle()方法中根据'user_type'的值来决定是否允许访问。最后,可以使用这些中间件来保护路由或控制器,让其只对特定类型的用户开放。

具体操作如下:

1. 在用户的迁移中添加'user_type'字段,用于确定用户的类型。

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');
        $table->unsignedInteger('user_type');
        $table->rememberToken();
        $table->timestamps();
    });
}

2. 创建两个中间件,一个用于普通用户,一个用于管理员。

php artisan make:middleware UserMiddleware
php artisan make:middleware AdminMiddleware

3. 在Kernel.php文件中注册中间件。

protected $routeMiddleware = [
    'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
    'can' => \Illuminate\Auth\Middleware\Authorize::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    'user' => \App\Http\Middleware\UserMiddleware::class,
    'admin' => \App\Http\Middleware\AdminMiddleware::class
];

4. 修改中间件的handle()方法。

UserMiddleware.php:

public function handle($request, Closure $next)
{
    if(Auth::user()->user_type == 1)
        return $next($request);
    return redirect('/');
}

AdminMiddleware.php:

public function handle($request, Closure $next)
{
    if(Auth::user()->user_type == 2)
        return $next($request);
    return redirect('/');
}

5. 使用中间件保护路由或控制器。

// 仅允许管理员访问的路由
Route::get('/admin', function () {
    return view('admin');
})->middleware('admin');

以上就是在Laravel 5.4中使用一个表进行多身份验证的方法。通过添加中间件并根据用户的类型来进行访问控制,可以实现对不同类型用户的保护。

希望这能对你有所帮助,祝你好运!

0