我正在尝试使用多个表进行基于子域的身份验证。因此,我试图在运行时使用Sentinel的setModel
函数来设置模型实例。
所以在我的路线文件中我有一些简单的逻辑:
if (Request::getHost() == $url) {
Sentinel::getUserRepository()->setModel('App\Client');
} else {
Sentinel::getUserRepository()->setModel('App\User');
}
作为一个URL的逻辑使用一个模型而另一个使用另一个模型。现在,当我尝试通过执行App\Client
加载dd(Sentinel::getUserRepository());
时,我得到了一个返回信息,如:
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'];
}
我使用了Github Wiki中的this guide,但是你可以看到我没有实现我想要做的事情。
如何在运行时使用这种设置模型的方法,并使用所有标记命令的正确模型?
答案 0 :(得分:0)
对于遇到相同问题的任何人,我将此标记为cartalyst/sentinel存储库中的问题,并提供了一些反馈。
解决方案不仅要设置用户存储库,还要在持久性存储库中定义模型:
Sentinel::getUserRepository()->setUsersModel('App\Client');
Sentinel::getPersistenceRepository()->setUsersModel('App\Client');
通过Sentinel::getUser()
等方法可以访问上面指定的模型。