2017-06-03 48 views
0

我試圖使用多個表進行基於子域的身份驗證。因此,我試圖在運行時使用Sentinel的setModel函數來設置模型實例。Laravel Sentinel setModel訪問錯誤的表

在我的路線

所以文件我有一些簡單的邏輯:

if (Request::getHost() == $url) { 
    Sentinel::getUserRepository()->setModel('App\Client'); 
} else { 
    Sentinel::getUserRepository()->setModel('App\User'); 
} 

是一個URL的邏輯使用一個模型,另一個使用其他模型。現在,當我試圖做一個dd(Sentinel::getUserRepository());我獲得回報,如加載App\Client

IlluminateUserRepository {#113 ▼ 
    #hasher: NativeHasher {#114} 
    #model: "App\Client" 
    #dispatcher: Dispatcher {#23 ▶} 
    #dispatcherStatus: true 
} 

這是偉大然而,當我打電話Sentinel::getUser();,我離開了,我有以下的輸出:

EloquentUser {#230 ▼ 
    #table: "users" 
    #fillable: array:5 [▶] 
    #hidden: array:1 [▶] 
    #persistableKey: "user_id" 
    #persistableRelationship: "persistences" 
    #loginNames: array:1 [▶] 
    #connection: "mysql" 
    #primaryKey: "id" 
    #keyType: "int" 
    +incrementing: true 
    #with: [] 
    #withCount: [] 
    #perPage: 15 
    +exists: true 
    +wasRecentlyCreated: false 
    #attributes: array:12 [▶] 
    #original: array:12 [▶] 
    #casts: [] 
    #dates: [] 
    #dateFormat: null 
    #appends: [] 
    #events: [] 
    #observables: [] 
    #relations: [] 
    #touches: [] 
    +timestamps: true 
    #visible: [] 
    #guarded: array:1 [▶] 
    #permissionsInstance: null 
} 

這是指App\User模型,而不是我的App\Client模型。

我不明白爲什麼,但我似乎無法獲得Sentinel的功能來查看我想要引用的模型。

這是我的客戶模型作爲參考。

namespace App; 

class Client extends \Cartalyst\Sentinel\Users\EloquentUser 
{ 
    /** 
    * The fields for sentinel to authenticate (login) 
    * 
    * @var array 
    */ 
    protected $loginNames = ['email']; 

    /** 
    * The table associated with model. 
    * 
    * @var String 
    */ 
    protected $table = 'clients'; 

    /** 
    * Used for mass assignment fields. 
    * 
    * @var Array 
    */ 
    protected $fillable = ['email', 'password', 'permissions', 'last_login', 'first_name', 'last_name']; 
} 

我用this guide從GitHub的維基,但你可以看到我不是實現什麼,我試圖做的。

如何在運行期間使用此方法設置模型,並使用所有哨兵命令的正確模型?

回答

0

對於遇到同樣問題的任何人,我將這標記爲cartalyst/sentinel存儲庫中的問題,並提供了一些反饋。

解決方案是不僅設置用戶儲存庫還定義所述持久性庫的模型:

Sentinel::getUserRepository()->setUsersModel('App\Client'); 
Sentinel::getPersistenceRepository()->setUsersModel('App\Client'); 

通過這種方法,如Sentinel::getUser()將訪問上面指定的模型。

請看這裏的完整回覆:https://github.com/cartalyst/sentinel/issues/367