首页 > 解决方案 > 多个守卫laravel的user_id冲突

问题描述

我是 Laravel 的新手,我创建了两个守卫“用户守卫”(默认一个)和“管理员守卫”。我将身份验证会话保存在数据库而不是文件中。

现在的问题是用户 ID 导致会话表中的冲突。例如,如果我在 users 表中创建了一个新用户,并且在 admin 表中创建了新的管理员帐户,那么两者在会话表中都将具有相同的 id,并且由于 id 不是唯一的,即使我只是正常登录,它也会自动将我登录到管理员帐户用户。

我已经在 Google 上搜索过,但找不到任何有用的东西。只有这个人问了同样的问题但没有回答: Laravel 中的多会话表

这是我的代码:config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
        'hash' => false,
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',

    ],
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,

    ]
],

AdminLoginController.php

if (auth()->guard('admin')->attempt(['email' => $request->email, 'password' => $request->password])) {
    $user = auth()->guard('admin')->user();
    return redirect()->route('admin');

}

标签: phpdatabaselaravelsession

解决方案


管理员可能不应该有单独的表和单独的雄辩模型,因为管理员用户。他们只是具有提升权限的用户。

与其为管理员创建单独的模型、守卫和提供者,不如考虑将角色和/或权限附加到您的用户模型以跟踪用户是否是管理员。

这是一个很好的包来帮助解决这个问题:https ://github.com/spatie/laravel-permission


推荐阅读