2017-04-20 8 views
0

私はこのバージョンが"tymon/jwt-auth": "^[email protected]"であるTymonのJWTを私の作曲家に使っています。Laravel/Lumen Tymon JWTの試行パラメータ

attemptではどのようにパラメータを渡すことができますが、実際にはSQLクエリでは使用しませんか?

現在、私は、ユーザー名とパスワードによってフィルタリングすることができるよとトークンを返します。

LoginController.php

$token = $jwt->attempt([ 
    'username' => $request->get('username'), 
    'password' => md5($request->get('password')) 
]); 

しかし、私は、サイトごとに複数のデータベースを使用しておりますので、私はへの応用をしたいですそれが使用しているsite_codeを特定し、与えられたsite_codeでデータベースベースを設定します。

例:

私は、サイトAを使用していた場合は、サイトBならば、それはその後、database_bなど、database_aを使用する必要があります。現在、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メソッドで渡されたパラメータを使用します。 siteCode要求を取得し、データベース接続を決定するためにUserモデルにそれを渡すが、それを使用しないように方法はあり

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'siteCode' in 'where clause' (SQL: select * fromユーザーwhere= test and password = test andサイトコード= A limit 1)

:だから、私にこのようなエラーが発生しますSQLクエリのために?

答えて

0

私はそうすることで道を見つけました。しかし、これが正しい方法であるのか、それを行うための他の「正しい方法」があるのか​​を知りたいですか?これらのサイトのデータベース構造が同じであれば、複数のサイトとデータベースを処理するAPIを1つ持つことができます。その一例は、同じサービスを共有する全面的に同じデータベース構造を持つブログサイトです。

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 
} 
関連する問題