2017-04-20 30 views
0

我在我的作曲家中使用了流明中的Tymon's智威湯遜版本>"tymon/jwt-auth": "^[email protected]"Laravel /流明Tymon智威湯遜嘗試參數

如何在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

我怎樣才能設置數據庫連接和表基地給出的網站代碼?

我想什麼是轉嫁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用戶where用戶名= test and password = test and SITECODE = A limit 1)

有沒有一種辦法讓siteCode請求,並把它傳遞到User模型來確定數據庫連接,但不使用它爲SQL查詢?

回答

0

我已經找到了這樣做的方法。但是想知道這是否是正確的做法或者是否有其他「正確的方法」來做到這一點?如果這些站點的數據庫結構相同,則可以使用一個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 
}