Php 多用户表的身份验证
我对Laravel auth模块有问题 我正在将旧工具重写为laravel,但必须保留旧的系统数据库结构 系统使用多个数据库(每个部门分开),并识别url应该使用哪个数据库,例如Php 多用户表的身份验证,php,laravel,authentication,eloquent,Php,Laravel,Authentication,Eloquent,我对Laravel auth模块有问题 我正在将旧工具重写为laravel,但必须保留旧的系统数据库结构 系统使用多个数据库(每个部门分开),并识别url应该使用哪个数据库,例如 www.example.com/foo //use foo DB for foo department www.example.com/bar //use bar DB for bar department Foo和Bar数据库有自己的users表。两个数据库中都有一些帐户,但id不同,用户名相同。例如:
www.example.com/foo //use foo DB for foo department
www.example.com/bar //use bar DB for bar department
Foo和Bar数据库有自己的users表。两个数据库中都有一些帐户,但id不同,用户名相同。例如:
//foo DB users table
ID username
1 xyz
2 abc
//bar DB users table
ID username
1 qwe
2 xyz
假设我以用户xyz(id 1)的身份使用foo deparment(和DB)登录系统
我现在转到律师事务部(和律师事务部)
因此,我以用户qwe的身份登录到酒吧部门(和DB),因为系统一直使用我登录到系统的id(1)
如何改变这种行为并强制系统使用用户名而不是id作为在DBs中标识用户的密钥
我知道我可以在用户模型中使用用户名作为主键,但接下来我必须更改与用户模型以及其他东西(如Auth::id()等)相关的所有关系
有更简单的方法吗?身份验证卫士以这种方式引用用户id字段:
$user->getAuthIdentifier())
因此,您可以在您的用户模型中执行此操作:
class User extends Model {
...
public function getAuthIdentifier() {
return $this->username;
}
}
如果您害怕Auth::id()更改,请查看会话保护的实现:
public function id()
{
if ($this->user()) {
return $this->user()->getAuthIdentifier();
}
}
更新:
但解决任何自定义授权问题的最佳方法是使用您自己的用户提供者和auth-guard
这听起来可能很难,但它就像实现两个接口一样简单。请在此处和查看官方文档。例如,您可以使用vendor/laravel/framework/src/illumb/Auth/SessionGuard.php
(顺便看一下它的helper traitguardhelp
)和vendor/laravel/framework/src/illumb/Auth/DatabaseUserProvider.php