php-Laravel:在表单上输入电子邮件后,每次单击发送密码重置链接时,我都会收到“无效选择”
以下代码是从我ForgotPasswordController的 laravel 应用程序中复制的。Invalid selection每次我尝试发送忘记的密码重置链接时都会出错。
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\PasswordReset;
use App\Models\User;
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
use Illuminate\Http\Request;
class ForgotPasswordController extends Controller
{
/**
|------------------------------------------------------------------ --------
| Password Reset Controller
|--------------------------------------------------------------------------
|
| This controller is responsible for handling password reset emails and
| includes a trait which assists in sending these notifications from
| your application to your users. Feel free to explore this trait.
|
*/
use SendsPasswordResetEmails;
public function __construct()
{
$this->middleware('guest');
}
public function showLinkRequestForm()
{
$pageTitle = "Forgot Password";
return view(activeTemplate() . 'user.auth.passwords.email', compact('pageTitle'));
}
public function sendResetCodeEmail(Request $request)
{
if ($request->type == 'email') {
$validationRule = [
'value'=>'required|email'
];
$validationMessage = [
'value.required'=>'Email field is required',
'value.email'=>'Email must be a valid email'
];
}elseif($request->type == 'username'){
$validationRule = [
'value'=>'required'
];
$validationMessage = ['value.required'=>'Username field is required'];
}else{
$notify[] = ['error','Invalid selection'];
return back()->withNotify($notify);
}
$request->validate($validationRule,$validationMessage);
$user = User::where($request->type, $request->value)->first();
if (!$user) {
$notify[] = ['error', 'User not found.'];
return back()->withNotify($notify);
}
PasswordReset::where('email', $user->email)->delete();
$code = verificationCode(6);
$password = new PasswordReset();
$password->email = $user->email;
$password->token = $code;
$password->created_at = \Carbon\Carbon::now();
$password->save();
$userIpInfo = getIpInfo();
$userBrowserInfo = osBrowser();
sendEmail($user, 'PASS_RESET_CODE', [
'code' => $code,
'operating_system' => @$userBrowserInfo['os_platform'],
'browser' => @$userBrowserInfo['browser'],
'ip' => @$userIpInfo['ip'],
'time' => @$userIpInfo['time']
]);
$pageTitle = 'Account Recovery';
$email = $user->email;
session()->put('pass_res_mail',$email);
$notify[] = ['success', 'Password reset email sent successfully'];
return redirect()->route('user.password.code.verify')->withNotify($notify);
}
public function codeVerify(){
$pageTitle = 'Account Recovery';
$email = session()->get('pass_res_mail');
if (!$email) {
$notify[] = ['error','Oops! session expired'];
return redirect()->route('user.password.request')->withNotify($notify);
}
return view(activeTemplate().'user.auth.passwords.code_verify',compact('pageTitle','email'));
}
public function verifyCode(Request $request)
{
$request->validate([
'code' => 'required',
'email' => 'required'
]);
$code = str_replace(' ', '', $request->code);
if (PasswordReset::where('token', $code)->where('email', $request->email)->count() != 1) {
$notify[] = ['error', 'Invalid token'];
return redirect()->route('user.password.request')->withNotify($notify);
}
$notify[] = ['success', 'You can change your password.'];
session()->flash('fpass_email', $request->email);
return redirect()->route('user.password.reset', $code)->withNotify($notify);
}
}