Laravel 的 CRSF 如果不合法如何提示?

Laravel在CSRF验证没通过的是否会抛出一个异常,如何才能在ajax中返回一个json来提示前端?

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

@xiaoxiaoming 我想 @JimChen 指的 Token 是指身分驗證的 Token,而非 csrf token
針對這個問題的回答:
可以在 Exception 中統一捕獲錯誤並回傳

public function render($request, Exception $exception)
    {
        if ($exception instanceof TokenMismatchException) {
            return reponse()->json([
                'message' => 'csrf token error'
            ]);
        }
}
6年前 评论
讨论数量: 6

如果你是采用ajax请求就没必要使用csrf了,采用token验证不就更好,csrf对于传统表单提交会更好

6年前 评论

@JimChen laravel不是自动验证post的csrf token的吗?你说的token是哪个呢?

6年前 评论

@xiaoxiaoming 我想 @JimChen 指的 Token 是指身分驗證的 Token,而非 csrf token
針對這個問題的回答:
可以在 Exception 中統一捕獲錯誤並回傳

public function render($request, Exception $exception)
    {
        if ($exception instanceof TokenMismatchException) {
            return reponse()->json([
                'message' => 'csrf token error'
            ]);
        }
}
6年前 评论

@leochien 这个方法应该写在那个控制器里面呢?

6年前 评论

@leochien 已经弄好啦,非常感谢,不过你的 reponse()写错啦,应该是response()

6年前 评论

在 app/Exceptions/Handler.php 的 render 方法裡

6年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!