2013-08-27 2 views
0

У меня есть настройка страницы для сброса пароля пользователя электронной почты пользователя и пользователя zip_code для приложения. Однако я работаю правильно, если, например, я хочу просто изменить почтовый индекс, моя проверка не позволит ему из-за того, что он читает письмо, как уже существующее в базе данных, и возвращает ошибку. Каков наилучший способ обойти это? Я мог бы создать контроллер для каждого поля и сделать это индивидуально, но я чувствую, что есть некоторые утверждения, которые я мог бы использовать, может быть?Сброс электронной почты/пароля

Контроллер:

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, если это помогает

+0

Назначение хэш для '$ UserData [ 'confirm_password'] = Hash :: сделать (...)' не имеет никакого смысла. Невозможно сравнить два хэша, так что либо вы не используете '$ userdata ['confirm_password']' впоследствии, либо генерируемый хеш ужасно опасен и не использует соль. – martinstoeckli

+0

Это не было связано с моим вопросом. Пароль и confirm_password просто просто для сравнения двух паролей в валидации. Пароль подтверждения поступает в базу данных, и поэтому они хэшируются после прохождения проверки. Поле подтверждения пароля НЕ используется в другом месте, кроме как для создания учетной записи и для изменения информации об учетной записи (как вы видите здесь). – Lynx

+0

Я предполагаю, что могу удалить confirm_password для сохранения в моей базе данных и просто пароль. Если это ваша забота? Мне действительно не нужно это там. Я проверю это, хотя! Благодаря! – Lynx

ответ

1

Вы можете установить уникальное правило проверки, чтобы игнорировать текущий идентификатор

$rules = array(
       'email' => 'required|email|unique:users,email,'.Auth::user()->id, 
       'password' => 'required|min:5', 
       'confirm_password' => 'required|same:password', 
       'user_zip_code' => 'required' 
      ); 

See here for more info from the docs

+0

Я смотрел вверх и вниз по этой странице, пытаясь найти это. Большое спасибо! – Lynx

Смежные вопросы