Php 对laravel 5中两个以上表中的用户进行身份验证

Php 对laravel 5中两个以上表中的用户进行身份验证,php,laravel,authentication,laravel-5.2,Php,Laravel,Authentication,Laravel 5.2,据我所知,Auth::trunt用于验证users表中的用户,但我想验证managers表中的其他用户和admins表中的管理员。我知道有laravelmultiauth插件已经存在。但是我们是否可以创建自己的AuthServiceProvider来验证来自多个表的用户?如果您愿意,请尝试我的想法。我希望不同的表有不同的用户。因为如果您在其他表中有相同的用户,它将不起作用 选择您的优先级表(例如用户) 添加条件 if(Auth::user(尝试(…) elseif(Auth::manager(

据我所知,
Auth::trunt
用于验证
users
表中的用户,但我想验证
managers
表中的其他用户和
admins
表中的管理员。我知道有
laravelmultiauth
插件已经存在。但是我们是否可以创建自己的
AuthServiceProvider
来验证来自多个表的用户?

如果您愿意,请尝试我的想法。我希望不同的
有不同的
用户
。因为如果您在其他表中有相同的
用户
,它将不起作用

  • 选择您的优先级表(例如用户)
  • 添加条件
    • if(Auth::user(尝试(…)
    • elseif(Auth::manager(尝试(…))
    • elseif(Auth::admins(尝试(…))
  • 注意:此处的优先级表是
    用户
    ,如果该用户不在该表中,它将尝试
    管理者
    表,如果仍然不存在,它将检查
    管理员
    表,否则(使用
    其他
    )返回消息错误

    其他选项:

    其他选项是使用此软件包
    sarav/laravel multiauth
    。您可以遵循此线程。有关详细信息,请参阅

    更多参考资料:


    您可以设置多个身份验证保护,每个保护都有不同的提供程序。提供程序定义要使用的表或模型

    config/auth.php
    中,您可以按如下方式设置
    提供程序
    ,还可以为每个提供程序设置相应的
    防护装置

    'providers' => [
        'users'  => [
            'driver' => 'eloquent',
            'model'  => App\User::class,
        ],
        'managers'  => [
            'driver' => 'eloquent',
            'model'  => App\Manager::class,
        ],
        'admins'  => [
            'driver' => 'eloquent',
            'model'  => App\Admin::class,
        ]
    ]
    
    然后您可以像这样进行身份验证:

    Auth::attempt($credentials) // use default guard for simple users
    Auth::guard('manager')->attempt($credentials)
    Auth::guard('admin')->attempt($credentials)
    

    查看文档。

    为managers表和admins表创建一个模型。此模型应扩展
    illumb\Foundation\Auth\User

    config/auth.php

    添加到提供程序阵列:

    'managers' => [
        'driver' => 'eloquent',
        'model' => App\Manager::class,
     ],
    
    添加到guards阵列:

    'web_manager' => [
        'driver' => 'session',
        'provider' => 'managers',
     ],
    
    然后。在
    LoginController
    (使用
    php artisan make:auth为manager创建一个)中,使用trait
    illighted\Foundation\auth\AuthenticatesUsers
    和 覆盖保护和重定向属性

    protected $redirectTo = 'redirect_path_after_manager_login';
    
    protected function guard()
    {
      return Auth::guard('web_manager');
    }
    

    管理器模型经过身份验证,您可以获得经过身份验证的管理器对象
    Auth::guard('web\u manager')->user();

    首先在
    illumb\Foundation\Auth>中创建管理员身份验证表

        <?php
    
    namespace Illuminate\Foundation\Auth;
    use Illuminate\Auth\Authenticatable;
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Auth\Passwords\CanResetPassword;
    use Illuminate\Foundation\Auth\Access\Authorizable;
    use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract;
    use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract;
    use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
    
        class Admin extends Model implements
            AuthenticatableContract,
            AuthorizableContract,
            CanResetPasswordContract
        {
            use Authenticatable, Authorizable, CanResetPassword;
        }
    
    之后,您需要修改
    config/auth.php
    ,如下所示 外接程序提供程序数组

    'admins' => [
                'driver' => 'eloquent',
                'model' => App\Admin::class,
            ], 
    
    并添加防护装置阵列

     'user' => [
                'driver' => 'session',
                'provider' => 'users',
            ],
     'admin' => [
                'driver' => 'session',
                'provider' => 'admins',
            ],
    
    现在从用户表进行身份验证

     if (Auth::guard('user')->attempt(['email' => $email, 'password' => $password])) {
            $details = Auth::guard('user')->user();
            $user = $details['original'];
            return $user;
        } else {
            return 'auth fail';
        }
    
    并从管理表进行身份验证

     if (Auth::guard('admin')->attempt(['email' => $email, 'password' => $password])) {
            $details = Auth::guard('admin')->user();
            $user = $details['original'];
            return $user;
        } else {
            return 'auth fail';
        }
    

    谢谢你的回答我应该把你的最后一个代码放在哪里?(用于身份验证)我应该把你的最后一个代码放在哪里?(用于身份验证)你可以将上面的代码放在你的LoginController中为什么你需要创建一个Admin Authenticatable?你可以使用现有的User Authenticatable类…在LoginController中最后两位的确切位置???当我尝试将它放在任何地方时,它会抛出一个错误,就像我不能在任何地方使用if语句一样
     if (Auth::guard('admin')->attempt(['email' => $email, 'password' => $password])) {
            $details = Auth::guard('admin')->user();
            $user = $details['original'];
            return $user;
        } else {
            return 'auth fail';
        }