Laravel 5.5 在没有电子邮件字段的情况下重设密码

Laravel 5.5 reset password without email field

我没有遇到过要求您在重置请求期间确认您的电子邮件地址的网站,这似乎是一个不必要的步骤,我希望我的用户只能输入密码和密码确认,但不能输入电子邮件.

我想知道是否有解决方案,我正在考虑一个简单的解决方案,我会将用户电子邮件地址作为参数传递给重置 link,就像这样

website.com/verify/{{reset_token}}/{{email}}

然后我将检索此电子邮件参数并将其传递给隐藏的输入值,但我不知道如何将电子邮件地址附加到重置 link。

如果大家知道解决方法请在评论中告诉我

感谢您的帮助

我希望您使用的是默认 Laravel 路由,它们是...

// Don't forget to add the names to these routes. 
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.forgot.get');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.forgot.post');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset.get');
Route::post('password/reset', 'Auth\ResetPasswordController@reset')->name('password.reset.post');

然后运行

php artisan make:mail PasswordResetMail

然后在你的 User 模型中,添加这个函数

public function sendPasswordResetNotification($token)
{
  Mail::send(new PasswordResetMail($this));
}

然后在PasswordResetMail,然后在你的构造函数中,你会得到用户

public function __construct($user)
{
  $this->user = $user;
}

然后将用户连同令牌一起传递到 blade 视图,然后在您的 blade 文件中添加路由

route('password.reset.get', ['token' => $token, 'email' => urlencode($user->email)]);

这会将电子邮件传递为

?email=useremail%40gmail.com // Should be urlencoded

然后,在您的重置表单中,将其添加为

<input type="hidden" value="{{ urldecode(request()->get('email')) }}" name="email">

应该可以了:)