【问题标题】:Alter Request parameter(Email) and then Authenticate User in Laravel更改请求参数(电子邮件),然后在 Laravel 中验证用户
【发布时间】:2021-02-19 07:15:30
【问题描述】:

我需要更改请求参数,即电子邮件,然后尝试使用新电子邮件登录。 我正在尝试:

$user_handle = $request->email;
$gook = Gookarma::where('handle', '=', $user_handle)->firstOrFail();
$acc = Account::find($gook->karmable_id);
$request->email = $acc->email;
            
if ($this->attemptLogin($request)) {
    return $this->sendLoginResponse($request);
}

但它不会更新请求,并且登录尝试与之前的电子邮件字段输入一起进行。 我从 API 中提取的上一封电子邮件。

我尝试使用request->all(),但在请求更新后尝试登录时,它会显示错误。

【问题讨论】:

    标签: php laravel authentication illuminate


    【解决方案1】:

    创建请求实例的新变量并将先前请求变量中的电子邮件和密码分配给新变量对我有用。

    $req = new Request([$request]);
    $req['email']=$acc->email;
    $req['password'] = $request->password;
    

    【讨论】:

      【解决方案2】:

      你可以使用merge方法:

      $request->merge([
          'email' =>$acc->email,
      ]);
      

      或者您可以构建一个数组来替换整个请求输入,例如:

      $arrayToReplace=$request->all();
      $arrayToReplace['email']=$acc->email;
      

      然后使用replace方法:

       $request->replace($arrayToReplace);
      

      如果以上两种方法都不起作用,请尝试自己提出请求:

       $array=$request->all();
       $array['email']=$acc->email;
       $req = new Request([$array]);
      

      然后将新请求用于您的操作。

      【讨论】:

      • 感谢您的回复,我尝试这样做但它没有更新电子邮件,我尝试了此 $request = $request->all(); $request['email'] = $acc->email;这更新了电子邮件,但在 $this->attemptLogin($request) 上显示错误:Argument 1 passed to App\Http\Controllers\Auth\LoginController::attemptLogin() must be an instance of Illuminate\Http\Request, array给定
      • 试试第二种方法
      • 它也不起作用。请求对象未更新。
      • 你有没有:使用Illuminate\Http\Request;在班上名列前茅?
      • 是的,我已经导入了
      【解决方案3】:

      你可以试试这样的:

      $request->merge(['email' => $acc->email]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-14
        • 2019-02-27
        • 2019-10-18
        • 2020-07-13
        • 2020-05-29
        • 2020-04-01
        • 2017-05-22
        • 2017-05-18
        相关资源
        最近更新 更多