Php 重置电子邮件/密码
我有一个页面设置来重置用户的电子邮件地址密码和应用程序的用户邮政编码。但是,我已使其正常工作,例如,如果我只想更改邮政编码,我的验证将不允许它,因为它读取数据库中已存在的电子邮件,并返回一个错误。最好的解决办法是什么?我可以为每个字段创建一个控制器并单独执行,但我觉得有一些if语句可以使用 控制器:Php 重置电子邮件/密码,php,laravel,laravel-4,Php,Laravel,Laravel 4,我有一个页面设置来重置用户的电子邮件地址密码和应用程序的用户邮政编码。但是,我已使其正常工作,例如,如果我只想更改邮政编码,我的验证将不允许它,因为它读取数据库中已存在的电子邮件,并返回一个错误。最好的解决办法是什么?我可以为每个字段创建一个控制器并单独执行,但我觉得有一些if语句可以使用 控制器: enter public function getEditUser() { $userdata = array( 'email' =&g
enter
public function getEditUser() {
$userdata = array(
'email' => Input::get('email'),
'password' => Input::get('password'),
'confirm_password' => Input::get('confirm_password'),
'user_zip_code' => Input::get('user_zip_code')
);
$rules = array(
'email' => 'required|email|unique:users,email',
'password' => 'required|min:5',
'confirm_password' => 'required|same:password',
'user_zip_code' => 'required'
);
$validation = Validator::make($userdata, $rules);
if ($validation->fails()) {
return Redirect::to('dashboard/edit/account')->withErrors($validation)
->withInput();
}
$userdata['password'] = Hash::make($userdata['password']);
$userdata['confirm_password'] = Hash::make($userdata['confirm_password']);
User::find(Auth::user()->id)->update($userdata);
return Redirect::to('dashboard');
}
Unique显然需要到位,这样它就不会与其他帐户匹配
此外,我的电子邮件是通过Auth设置的。
Auth::user()->email
如果这有帮助您可以设置验证唯一规则以忽略当前id
$rules = array(
'email' => 'required|email|unique:users,email,'.Auth::user()->id,
'password' => 'required|min:5',
'confirm_password' => 'required|same:password',
'user_zip_code' => 'required'
);
将哈希分配给
$userdata['confirm_password']=hash::make(…)
没有意义。无法比较这两个哈希值,因此要么您事后没有使用$userdata['confirm_password']
,要么生成的哈希值非常不安全,并且没有使用salt。这与我的问题无关。密码和确认密码只是在验证中比较两个密码。确认密码确实会进入数据库,这就是为什么通过验证后会对其进行哈希处理。除了创建帐户和更改帐户信息(如您在此处看到的),确认密码字段在其他任何地方都不会使用。我想我可以删除确认密码以保存到我的数据库中,而只保留密码。如果这就是你担心的?我真的不需要它在那里。不过我会查一查的!谢谢这就是为什么它们在验证后被散列。它们被比较,然后散列,然后存储。只有通过验证后,您才能看到它们被散列…然后它们被更新。好的,我知道了,散列是安全的,并且$userdata['confirm_password']
确实没有在任何地方使用。我删除了我以前的评论,只是想确保散列是安全的。我在那一页上下寻找,试图找到它。非常感谢!