Просто хочу быть уверенным, что это «правильный путь» и, что наиболее важно, «безопасный ли путь». Я делаю простую форму для тех, кто хочет сбросить пароль (не вошел в систему). Я не хочу использовать способ Laravel (для этого нет специальной базы данных). Просто отправляю зашифрованную ссылку, ссылка действительна в течение 10 минут.
public function sendConfirmationLink(Request $request)
{
$validatedData = $request->validate([
'email' => 'required|email|exists:users',
]);
$user = User::where('email', $request->get('email'))->firstOrFail();
$parameters = [
'user_id' => $user->id,
'date' => Carbon::now(),
'type' => 'password_reset',
];
$passwordResetLink = Crypt::encrypt($parameters);
SendPasswordResetLink::dispatch($user, $passwordResetLink)->onQueue('high');
}
Позже я расшифровываю это ha sh и меняю пароль.
public function resetPassword(Request $request)
{
$validatedData = $request->validate([
'hash' => 'required',
'new_password' => 'required|string|min:6|confirmed',
]);
try {
$decrypted = Crypt::decrypt($request->get('hash'));
$password = Hash::make($request->get('new_password'));
$user = User::where('id', $decrypted['user_id'])->firstOrFail();
$user->password = $password;
$user->save();
} catch (DecryptException $e) {
abort(404);
}
}
Если я прав ... эту «ссылку» будет чрезвычайно сложно взломать, и она действительна всего 10 минут. Является ли это менее безопасным, чем собственная версия Laravel с аналогичным кодом, хранящимся в базе данных?
Да, я знаю, что Laravel Auth может сделать это за меня. Я хочу использовать свой метод не только для сброса пароля, поэтому я ищу ответ, если он безопасен таким образом.