繁体   English   中英

使用Eloquent Model Class从数据库中选择一条记录时,如何在Laravel 4中解密密码?

[英]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();

在这种情况下,密码将以散列的形式插入输入中。 因此,即使用户甚至不想更改其密码,它也会更改,因为散列的密码将再次被散列。

因此,我需要以某种方式选择未隐藏的密码,以便当用户不想编辑其密码时,密码保持不变。

有人可以帮我吗?

如果我理解正确,那么您只想在用户输入密码的情况下更改该密码,如果这样,我会这样做。

  1. 我将删除between alpha_numconfirmed password规则。 删除该密码可以使用更安全的密码。
  2. 我会在password规则中添加same:password_confirmation以确保两个字段相等。
  3. 我将删除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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM