![](/img/trans.png)
[英]Query Exception when creating a database record using laravel eloquent
[英]How to decrypt password in Laravel 4 when selecting a record from the database using the Eloquent Model Class?
我有一个小型应用程序,用户可以在其中创建帐户,也可以在其中编辑包含密码的帐户。 我想通过使用value="value here"
选项将我从数据库中选择的帐户的所有记录插入到editform的输入中。
情况是,我使用一个验证器来验证用户的输入,此验证器用于创建和编辑帐户是相同的:
class Account extends Validator {
public static $rules = [
'name' => 'required|alpha|min:2',
'secondname' => 'alpha_spaces|min:2',
'lastname' => 'required|alpha|min:2',
'email' => 'required|email|unique:accounts',
'password' => 'required|alpha_num|between:6,12|confirmed',
'password_confirmation' => 'required|alpha_num|between:6,12'
];
}
这是我的编辑表单:
这是我从数据库中选择记录的代码:
$q = Input::get('query');
$result = Account::where('id', '=', $q)->get();
在这种情况下,密码将以散列的形式插入输入中。 因此,即使用户甚至不想更改其密码,它也会更改,因为散列的密码将再次被散列。
因此,我需要以某种方式选择未隐藏的密码,以便当用户不想编辑其密码时,密码保持不变。
有人可以帮我吗?
如果我理解正确,那么您只想在用户输入密码的情况下更改该密码,如果这样,我会这样做。
between
alpha_num
并confirmed
password
规则。 删除该密码可以使用更安全的密码。 password
规则中添加same:password_confirmation
以确保两个字段相等。 password_confirmation
的规则, same:password_confirmation
已经解决了这一问题。 因此,最后,您的数组应如下所示:
public static $rules = [
'name' => 'required|alpha|min:2',
'secondname' => 'alpha_spaces|min:2',
'lastname' => 'required|alpha|min:2',
'email' => 'required|email|unique:accounts',
'password' => ['required', 'same:password_confirmation']
];
当您创建新用户时,此方法工作正常,但是如果我们编辑用户(您当前的问题),这将运行密码要求检查。 要解决此问题,我们必须从password
删除required
。 因为我们现在将password
规则作为一个数组,并且知道required
是该数组的第一项,所以我们可以在更新用户时运行验证之前将其删除。
如果用户键入更改password
,我们还需要确保不要插入空password
并对其进行哈希处理。
$input = Input::all();
// make sure not to insert empty password
if (empty($input['password']))
unset($input['password']);
// remove the requirement of password
unset(Account::$rules['password'][0]);
// validate our rules
$validator = Validation::make($input, Account::$rules);
if ($validator->fails()) {
// do something if error
}
// hash if new password
if ( ! empty($input['password']))
$input['password'] = Hash::make($input['password']);
Account::find($accountId)->update($input);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.