看GitHub上的issue,Password reset e-mail missing e-mail in URL #15733showResetForm
传递的email是旧版本遗留的,新版本不建议传email值到视图,而是让用户填写email,所以建议是把showResetForm
的email传值删除。
这个问题当时也让我琢磨了很久,今天看@tsin 的答案让我成功解决了这个问题
app/Notifications/ResetPassword.php
·
·
·
public function toMail($notifiable)
{
return (new MailMessage)
->subject('重置密码')
->line('这是一封密码重置邮件,如果是您本人操作,请点击以下按钮继续:')
->action('重置密码', url(route('password.reset', [$this->token, 'email=' . encrypt($notifiable->email)], false)))
->line('如果您并没有执行此操作,您可以选择忽略此邮件。');
}
app/Models/User.php 中添加方法
use App\Notifications\ResetPassword;
·
·
·
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPassword($token));
}
修改视图文件 resources/views/auth/passwords/reset.blade.php
<div class="form-group">
<label for="email" class="col-md-4 control-label">邮箱地址:</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control" name="email"
value="{{decrypt($email)}}" readonly>
</div>
</div>
额,我贡献过回答,有人问过同样的问题
在 ResetPasswordController
中重写 showResetForm
方法,通过 token
到数据库中查找相应的 email
,然后将参数传递到前端。
看GitHub上的issue,Password reset e-mail missing e-mail in URL #15733showResetForm
传递的email是旧版本遗留的,新版本不建议传email值到视图,而是让用户填写email,所以建议是把showResetForm
的email传值删除。
这个问题当时也让我琢磨了很久,今天看@tsin 的答案让我成功解决了这个问题
app/Notifications/ResetPassword.php
·
·
·
public function toMail($notifiable)
{
return (new MailMessage)
->subject('重置密码')
->line('这是一封密码重置邮件,如果是您本人操作,请点击以下按钮继续:')
->action('重置密码', url(route('password.reset', [$this->token, 'email=' . encrypt($notifiable->email)], false)))
->line('如果您并没有执行此操作,您可以选择忽略此邮件。');
}
app/Models/User.php 中添加方法
use App\Notifications\ResetPassword;
·
·
·
public function sendPasswordResetNotification($token)
{
$this->notify(new ResetPassword($token));
}
修改视图文件 resources/views/auth/passwords/reset.blade.php
<div class="form-group">
<label for="email" class="col-md-4 control-label">邮箱地址:</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control" name="email"
value="{{decrypt($email)}}" readonly>
</div>
</div>
@ishu 的方法不错,不过会变成多重提示,我是在
vendor/laravel/framework/src/Illuminate/Foundation/Auth/ResetsPasswords.php
源码中添加了一个success
protected function rules()
{
return [
'token' => 'required',
'email' => 'required|email',
'password' => 'required|confirmed|min:6',
];
}
这里可以修改验证规则,我把密码最小长度改成了6位
protected function resetPassword($user, $password)
{
$this->setUserPassword($user, $password);
$user->setRememberToken(Str::random(60));
$user->save();
event(new PasswordReset($user));
session()->flash('success','重置密码成功');
$this->guard()->login($user);
}
在登录前添加一个session
就可以了
推荐文章: