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创建一个)中,使用traitillighted\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';
}