Laravel 5
Импорт паролей из Битрикс в Laravel 5
Бывает необходимость перенести проект с CMS Битрикс на Laravel. Возникает проблема с паролями, потому что старые пользователи будут продолжать заходить в личный кабинет.
Сделаем два столбца в users: password (для Laravel) и deprecated_password (для Битрикс). У старых пользователей password равен null, у новых - deprecated_password равен null.
При попытке входа в личный кабинет мы смотрим какой из паролей null. Если password, то сверяем хеш введенного пароля с deprecated_password и если все отлично, то зная оригинальный пароль, сохраняем в password хеш bcrypt($request->password), а deprecated_password делаем null.
Отдельный интерес представляет проверка deprecated_password.
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
public function checkBitrixPassword($deprecated_password, $current_password) { $db_password = substr($deprecated_password, -32); $salt = substr($deprecated_password, 0, strlen($deprecated_password) - 32); $user_password = md5($salt.$current_password); return $db_password === $user_password; } public function checkPassword(User $user, $current_password) { if (!is_null($user->password)) { return Hash::check($current_password, Auth::user()->password); } if (!is_null($user->deprecated_password)) { return $this->checkBitrixPassword($user->deprecated_password, $current_password); } return false; } public function tryUpdateDeprecatedPassword($email, $current_password) { if ($user = User::where('email', $email)->first()) { if(is_null($user->password) && !is_null($user->deprecated_password)) { if ($this->checkBitrixPassword($user->deprecated_password, $current_password)) { $user->password = bcrypt($current_password); $user->deprecated_password = null; $user->save(); } } } } |