database-design - Laravel 7 多重身份验证与 3 个不同的表
问题描述
我是 Laravel 7 的新手,我正在创建一个需要 3 个不同用户表(管理员、销售人员、仓库经理)的应用程序,每个用户都可以从单独的登录表单登录并拥有不同的仪表板。我想为每个用户实现身份验证,登录到他们指定的仪表板,用户有不同的列,这就是为什么我希望将它们保存在单独的表中而不是一个具有角色列的表中。
解决方案
您应该在config/auth.php中的警卫和提供程序中添加三个表,以使 auth() 函数识别每个表:注意将其替换为您的模型名称
'guards' => [
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
'salesperson' => [
'driver' => 'session',
'provider' => 'salesperson',
],
'manager' => [
'driver' => 'session',
'provider' => 'manager',
],
],
'providers' => [
'admin' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
'salesperson' => [
'driver' => 'eloquent',
'model' => App\Salesperson::class,
],
'manager' => [
'driver' => 'eloquent',
'model' => App\Manager::class,
],
],
之后你应该为每个人创建一个中间件来控制登录,所以你应该在中间件的$routemiddleware函数中添加它,在kernel.php 中:
'admin' => \App\Http\Middleware\AuthenticateAdmin::class,
'salesperson' => \App\Http\Middleware\AuthenticateSalesperson::class,
'manager' => \App\Http\Middleware\AuthenticateManager::class,
为每个控制器创建一个:
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Hash;
use App\Admin;
class LoginController extends Controller
{
use AuthenticatesUsers;
public function __construct()
{
$this->middleware('guest');
}
public function login(Request $request)
{
$this->validate($request, [
'email' => 'required|email',
'password' => 'required',
]);
if (auth()->guard('admin')->attempt(['email' => $request->input('email'), 'password' => $request->input('password')])) {
return redirect('*your route*');
} else {
dd('your username and password are wrong.');
}
}
public function getLogin()
{
return view('*the login form*');
}
}
在你的Admin.php
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class Relative extends Authenticatable
{
use Notifiable;
protected $guarded = [];
protected $hidden = [
'password'
];
public function getAuthPassword()
{
return $this->password;
}
}
重复最后两个步骤。如果您需要更多信息:https ://laracasts.com/discuss/channels/laravel/multi-auth-login-with-single-table-user-using-middleware-in-laravel
推荐阅读
- google-apps-script - 谷歌表格:如果有人将一系列单元格中的值更改为特定值,是否有办法只通知一个用户
- security - 使用 grep 查找报告文件中的 CRITICAL 漏洞
- python - 使用 GEKKO MHE 时出现方程定义错误(没有等式或不等式的方程)
- javascript - 如何一键更改多个对象的颜色?
- python-3.x - 以高性能和面向对象的方式编写 Spark ETL 作业
- python - 使用排序值操作的顺序不一致
- swift - 在 Ubuntu WSL 上构建 sourcekit-lsp 时出错
- amazon-web-services - Boto 可以通过 EKS 服务帐户担任角色吗
- html - 如何将标题与现有 CSS 居中对齐
- python - 如何使用索引中的值范围和框架中的标题和值创建数据透视表?