【问题标题】:Laravel Sentinel setModel accessing the wrong tableLaravel Sentinel setModel 访问错误的表
【发布时间】:2017-06-09 00:14:33
【问题描述】:

我正在尝试使用多个表进行基于子域的身份验证。因此,我尝试在运行时使用 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'];
}

我使用了 Github Wiki 中的 this guide,但是正如您所见,我没有实现我想要做的事情。

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

【问题讨论】:

    标签: laravel laravel-5 cartalyst-sentinel


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2018-07-09
      • 1970-01-01
      • 2018-05-31
      • 2017-04-16
      相关资源
      最近更新 更多