返回

php-Laravel:在表单上输入电子邮件后,每次单击发送密码重置链接时,我都会收到“无效选择”

发布时间:2022-05-27 11:33:46 216
# 后端

以下代码是从我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);
}

}

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像