Laravel Sentinel setModel访问错误的表

时间:2017-06-03 21:53:33

标签: laravel laravel-5 cartalyst-sentinel

我正在尝试使用多个表进行基于子域的身份验证。因此,我试图在运行时使用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,但是你可以看到我没有实现我想要做的事情。

如何在运行时使用这种设置模型的方法,并使用所有标记命令的正确模型?

1 个答案:

答案 0 :(得分:0)

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

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

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

通过Sentinel::getUser()等方法可以访问上面指定的模型。

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