Laravel Sentinel setModel 访问错误table

Laravel Sentinel setModel accessing the wrong table

我正在尝试使用多个表进行基于子域的身份验证。因此,我试图在运行时使用 Sentinel 的 setModel 函数来设置模型实例。

所以在我的路由文件中我有一些简单的逻辑:

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

逻辑是一个 URL 使用一个模型,另一个使用另一个模型。现在,当我尝试通过 dd(Sentinel::getUserRepository()); 加载 App\Client 时,我得到一个 return,例如:

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,但是如您所见,我没有实现我想要做的事情。

如何使用这种在运行时设置模型的方法并将正确的模型与所有哨兵命令一起使用?

对于遇到相同问题的任何人,我将其标记为 cartalyst/sentinel 存储库中的问题并提供了一些反馈。

解决方案不仅要设置用户存储库,还要在持久存储库上定义模型:

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

通过此方法如Sentinel::getUser()将访问上面指定的模型。

请在此处查看完整回复:https://github.com/cartalyst/sentinel/issues/367