繁体   English   中英

Laravel / Lumen Tymon JWT尝试参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM