0

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

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

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

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

4

1 回答 1

0

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

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

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

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

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

于 2017-06-08T16:14:33.953 回答