Laravel 将数据从控制器传递到中间件

Laravel Passing Data To Middleware From Controller

我想在控制器完成后将一些参数传递给后中间件运行,这是为了在生成新密码重置令牌时使任何密码重置令牌无效。

我的代码是:

控制器

public 函数 resetPasswordRequest(请求 $request) {

    $user = User::where('email', $request->email)->first();

    if (!$user) {
        throw ValidationException::withMessages([
            'message' => 'invalid_email',
        ]);
    }

    $reset_request = Password_reset::create([
        'user_email' => $request['email'],
        'reset_token' => Helper::makeRandomString(8, true),
    ]);

    $reset_token = $reset_request['reset_token'];
    $user_email = $request['email'];
    /*
    Helper::sendEmail('pass_reset', $user_email = $request['email'], $reset_token);
    */

  
    return response(array('message' => 'success', 'email' => $user_email, 'reset_token' => $reset_token, 'type' => 'reset'), status:200);
}

//中间件

public function handle(Request $request, Closure $next)
{

    $user_data = $next($request);

    error_log($user_data);


    $user_email = $user_data['email'];
    $type = $user_data['reset'];

    $tokens = null;

    if ($type == 'reset') {
        $tokens = Password_reset::where('user_email', '=', $user_email)->where('used', false)->get();
    } else if ($type == 'confirmation') {
        $tokens = EmailConfirm::where('user_email', '=', $user_email)->where('used', false)->get();
        error_log('fffff');
    }

    error_log('gggg');

    //Might not be optimum, need consultation

    foreach ($tokens as $column) {
        $column['used'] = true;
        $column->save();
    }

    return $next($request);
}

问题在于我似乎无法找到传递此数据的方法,如果我尝试通过内容方法访问它,结果将是一个字符数组。

关于这个或我可以使用的其他解决方案的任何提示?

您不需要中间件,因为重置密码几乎从来不是受保护的资源。

如果您忘记了密码,如何登录并访问受保护的资源?

中间件是守护路由及其对应的控制器。

在这种情况下,有一个用户未登录并想要重置其帐户的密码。

在控制器中处理请求即可。