[英]Laravel/Lumen Tymon JWT attempt parameters
我在作曲家的流明中使用Tymon的JWT,版本为"tymon/jwt-auth": "^1.0@dev"
。
如何在attempt
传递参数,但实际上不会在sql查询中使用它?
目前,我可以按用户名和密码进行过滤,并将返回令牌:
LoginController.php
$token = $jwt->attempt([
'username' => $request->get('username'),
'password' => md5($request->get('password'))
]);
但是由于我在每个站点上使用多个数据库,因此我希望应用程序确定它正在使用什么site_code并根据给定的site_code设置数据库。
例:
如果我使用的网站A,它应该使用database_a
,如果站点B则database_b
等等。 当前,我可以手动设置要在User
模型上使用的数据库连接和表。
例:
User.php
public function __construct()
{
$this->setConnection('database_a');
$this->setTable('users');
}
但是由于该应用程序处理不同的站点,因此site_code
在发布时传递site_code
(除了用户名和密码之外),并根据site_code
确定要使用哪个数据库。
如何根据给定的站点代码设置数据库连接和表?
我尝试的是通过这样的attempt
传递站点代码:
$token = $jwt->attempt([
'username' => $request->get('username'),
'password' => md5($request->get('password')),
'siteCode => $request->get('siteCode')
]);
所以我可以在User
模型上这样做:
public function __construct()
{
switch($this->siteCode) {
case 'A':
$this->setConnection('database_a');
break;
default:
$this->setConnection('database_b');
}
$this->setTable('users');
}
但是发生的事情是它实际上使用了SQL的attempt
方法上传递的参数。 所以它给我这样的错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'siteCode' in 'where clause' (SQL: select * from
用户名= test and password = test and
siteCode = A limit 1)
用户where
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'siteCode' in 'where clause' (SQL: select * from
= A limit 1)
有没有办法获取siteCode
请求并将其传递给User
模型以确定数据库连接,但不将其用于sql查询?
我已经找到了这样的方法。 但是想知道这是否是正确的方法,还是还有其他“适当的方法”呢? 如果那些站点的数据库结构相同,则具有一个API来处理多个站点和数据库是适用的。 例如,博客站点具有全面的数据库结构,并且共享相同的服务。
User.php(模型)
class User extends Model implements AuthenticatableContract, AuthorizableContract, JWTSubject
{
//some codes
public function __construct()
{
$siteCode = app('Illuminate\Http\Request')->get('siteCode');
switch ($siteCode) {
case 'A':
$this->setConnection('database_a');
break;
default:
$this->setConnection('database_b');
break;
}
$this->setTable('users');
}
//some codes
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.