关于将Sentinel与Laravel和$fillable数组一起使用的查询

关于将Sentinel与Laravel和$fillable数组一起使用的查询,laravel,laravel-5.1,cartalyst-sentinel,Laravel,Laravel 5.1,Cartalyst Sentinel,我使用Cartalyst Sentinel在Laravel中进行用户身份验证。 我已创建表单以添加新用户。 出于某种奇怪的原因,密码没有通过Sentinel::register(),除非我将密码字段放入用户类模型中的$filleble数组中。 这是一个潜在的安全问题。 我怎样才能避开这件事?在使用Sentinel创建新用户时,我肯定遗漏了一些东西(而且Sentinel文档中的有用信息非常少) 只是我正在做的代码方面的快速概述。我的数组中填充了创建用户所需的字段。此数组被传递到Sentinel::

我使用Cartalyst Sentinel在Laravel中进行用户身份验证。 我已创建表单以添加新用户。 出于某种奇怪的原因,密码没有通过
Sentinel::register()
,除非我将密码字段放入用户类模型中的
$filleble
数组中。 这是一个潜在的安全问题。 我怎样才能避开这件事?在使用Sentinel创建新用户时,我肯定遗漏了一些东西(而且Sentinel文档中的有用信息非常少)

只是我正在做的代码方面的快速概述。我的数组中填充了创建用户所需的字段。此数组被传递到
Sentinel::register()
中。这一切似乎都很顺利,但当我去查看数据库时,密码字段是空白的

$newUser = array(
    '_token' => Input::get('_token'),
    'email' => Input::get('email'),
    'password' => Input::get('password'),
    'first_name' => Input::get('first_name'),
    'middle_name' => Input::get('middle_name'),
    'last_name' => Input::get('last_name'));

$user = Sentinel::register($newUser);

请注意:不幸的是,我无法切换身份验证系统。我需要使用Sentinel。

如果不想将新用户设置为可填充属性,则需要在新用户上手动设置密码选项

$newUser = array(
'_token' => Input::get('_token'),
'email' => Input::get('email'),
'first_name' => Input::get('first_name'),
'middle_name' => Input::get('middle_name'),
'last_name' => Input::get('last_name'));

$user = Sentinel::register($newUser);

$user->password = Input::get('password');

$user->save();

在设置密码之前,您可能需要对密码进行哈希运算,对吗?类似于
$user->password=\Hash::make(输入::获取('password'))。除非Sentinel会自动这么做。

这是另一种与Jeff的回答几乎相同的方法。 这应该基于Sentinel代码工作,尽管我没有使用Sentinel。部署前进行测试

$newUser = array(
    '_token' => Input::get('_token'),
    'email' => Input::get('email'),
    'password' => Input::get('password'),
    'first_name' => Input::get('first_name'),
    'middle_name' => Input::get('middle_name'),
    'last_name' => Input::get('last_name')
);

Sentinel::register($newUser, function($user) use ($newUser) {
    try {
        return $user->password = \Hash::make($newUser['password']);
    } catch(RuntimeException $e) {
        return false;
    }
});
回调在fill方法之后运行,所以它应该绕过$fillable限制,如果您的设计需要,您可以从fillable中删除密码。

如果在回调中返回false,则不会创建用户。

如果密码在$filleble数组中,则Sentinel可以获取密码,对其进行散列,并将用户保存到数据库中。但是看起来我可能不得不按照你的建议去做。谢谢。
Sentinel::register
使用填充方法,因此如果你想批量分配,你必须在你的模型上的
$filleble
中提供
密码
字段。这种方法很有效,我想我更喜欢这种方法,因为它可以将所有内容都保存在一起。而且,
$user->hasher->hash()
不存在。相反,我使用了
\Hash::make($newUser['password'])
@zettetic哦,很酷,没有对代码进行太多的研究:)如果它对你有用,那么我想没关系。