Php 如何使用laravel中的特殊消息管理特殊错误

Php 如何使用laravel中的特殊消息管理特殊错误,php,laravel,laravel-5,error-handling,laravel-5.4,Php,Laravel,Laravel 5,Error Handling,Laravel 5.4,我用的是laravel 5.4。我需要处理一些错误。 想象用户登录并打开两个窗口(他的个人资料)。当用户在窗口中单击注销时,另一个窗口中仍有注销按钮,通过单击该按钮,laravel将显示csrf_令牌错误页面 我在非ajax中的注销及其提交表单到/logout 如何使用特殊消息处理此错误,或从注销控制器重定向到主页而不出错?(并非所有的csrf\u令牌错误,仅来自该控制器) 注销表格: 我将使用jquery单击注销按钮提交此表单: <form id="logout-form" action

我用的是laravel 5.4。我需要处理一些错误。 想象用户登录并打开两个窗口(他的个人资料)。当用户在窗口中单击注销时,另一个窗口中仍有注销按钮,通过单击该按钮,laravel将显示csrf_令牌错误页面

我在非ajax中的注销及其提交表单到
/logout
如何使用特殊消息处理此错误,或从注销控制器重定向到主页而不出错?(并非所有的
csrf\u令牌
错误,仅来自该控制器)

注销表格:

我将使用jquery单击注销按钮提交此表单:

<form id="logout-form" action="/logout" method="POST" style="display: none;">
    <input type="hidden" name="_token" :value="token">
</form>

一种方法是使用
GET
注销。事实上,使用一个简单的
就足够了。因此,您可以更改使用get的路线,并向表单挥手告别

尽管对于使用的方法可能有不同的意见,但老实说,这就足够了

更新

难道没有办法像我说的那样管理错误吗

在我看来,这是我目前最好的选择。否则,若要在有人尝试注销路径时显示特殊消息,即使他们已注销,我将只执行以下操作:

public function logout(Request $request)
{
    if (!auth()->check()) {
        return redirect('/')->with('login_error', 'You are already logged out please login again'); // message can be retrieved in session()
    }
    $this->guard()->logout();
    $request->session()->flush();
    $request->session()->regenerate();
    return redirect('/');
}
我仍然不会使用post,因为我没有创建任何资源


我希望这有帮助。

一种方法是使用
GET
注销。事实上,使用一个简单的
就足够了。因此,您可以更改使用get的路线,并向表单挥手告别

尽管对于使用的方法可能有不同的意见,但老实说,这就足够了

更新

难道没有办法像我说的那样管理错误吗

在我看来,这是我目前最好的选择。否则,若要在有人尝试注销路径时显示特殊消息,即使他们已注销,我将只执行以下操作:

public function logout(Request $request)
{
    if (!auth()->check()) {
        return redirect('/')->with('login_error', 'You are already logged out please login again'); // message can be retrieved in session()
    }
    $this->guard()->logout();
    $request->session()->flush();
    $request->session()->regenerate();
    return redirect('/');
}
我仍然不会使用post,因为我没有创建任何资源


我希望这能有所帮助。App\Exceptions\Handler.php中的 使用新的有效CSRF令牌将用户返回表单,因此页面将刷新,并且注销按钮将不存在

public function render($request, Exception $exception)
{ 
   if($exception instanceof TokenMismatchException)
   { 
      return redirect()
               ->back()
               ->with('your msg');
   }
   return parent::render($request, $exception); 
}
看起来,页面已刷新

不要用Get替换POST。它将不安全和标准


在App\Exceptions\Handler.php中 使用新的有效CSRF令牌将用户返回表单,因此页面将刷新,并且注销按钮将不存在

public function render($request, Exception $exception)
{ 
   if($exception instanceof TokenMismatchException)
   { 
      return redirect()
               ->back()
               ->with('your msg');
   }
   return parent::render($request, $exception); 
}
看起来,页面已刷新

不要用Get替换POST。它将不安全和标准


可能有办法做到这一点,但这是我目前能想到的最好的办法。也许您应该简单地将表单方法更改为GET,然后将路由中的方法更改为GET,从表单中删除token字段,这样您就不需要使用
了。优点是,您不必担心它会显示任何错误,如果您想在这种情况下自定义注销消息,那么就很容易了。因此,在您的控制器中执行任何操作之前,请检查
如果(!auth()->check()){由于您已注销,请执行某些操作}
否则请注销。您是否更改为获取?哦,是的。让它工作起来。拉雷维尔为什么要用这个帖子??post方法在这个问题上更安全吗???从这个意义上说,post更安全,因为它要求您必须登录,并且在您可以运行该路由之前拥有('csrf_令牌'),以便您可以确保访问该路由的人是登录用户,而不是其他人。但是,在注销的情况下,我不认为这是一个真正的问题,特别是在处理这种情况。可能有办法做到这一点,但这是我现在能想到的最好的办法。也许您应该简单地将表单方法更改为GET,然后将路由中的方法更改为GET,从表单中删除token字段,这样您就不需要使用
了。优点是,您不必担心它会显示任何错误,如果您想在这种情况下自定义注销消息,那么就很容易了。因此,在您的控制器中执行任何操作之前,请检查
如果(!auth()->check()){由于您已注销,请执行某些操作}
否则请注销。您是否更改为获取?哦,是的。让它工作起来。拉雷维尔为什么要用这个帖子??post方法在这个问题上更安全吗???从这个意义上说,post更安全,因为它要求您必须登录,并且在您可以运行该路由之前拥有('csrf_令牌'),以便您可以确保访问该路由的人是登录用户,而不是其他人。但是,在注销的情况下,我不认为这是一个真正的问题,特别是在处理这种情况下。我也参与了这个问题。我也参与了这个问题。我曾经用重定向处理这种问题,但这个答案给出了“正确的方法”,我用重定向处理这种问题,但这个答案给出了答案“正确的道路”