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);
}
问题在于我似乎无法找到传递此数据的方法,如果我尝试通过内容方法访问它,结果将是一个字符数组。
关于这个或我可以使用的其他解决方案的任何提示?
您不需要中间件,因为重置密码几乎从来不是受保护的资源。
如果您忘记了密码,如何登录并访问受保护的资源?
中间件是守护路由及其对应的控制器。
在这种情况下,有一个用户未登录并想要重置其帐户的密码。
在控制器中处理请求即可。
我想在控制器完成后将一些参数传递给后中间件运行,这是为了在生成新密码重置令牌时使任何密码重置令牌无效。
我的代码是:
控制器
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);
}
问题在于我似乎无法找到传递此数据的方法,如果我尝试通过内容方法访问它,结果将是一个字符数组。
关于这个或我可以使用的其他解决方案的任何提示?
您不需要中间件,因为重置密码几乎从来不是受保护的资源。
如果您忘记了密码,如何登录并访问受保护的资源?
中间件是守护路由及其对应的控制器。
在这种情况下,有一个用户未登录并想要重置其帐户的密码。
在控制器中处理请求即可。