禁用 ajax 查询的 Csrf


Disable Csrf for ajax query

我正在使用Laravel 5.1,我正在尝试禁用此路由的csrf验证,以便能够使用Jquery Form Validator执行一些远程验证:

Route::post('verify', 'formController@check');

如文档中所述,我只需要将我的 URI 添加到 $exclude 属性。 我做了:

namespace App'Http'Middleware;
use Illuminate'Foundation'Http'Middleware'VerifyCsrfToken as BaseVerifier;
class VerifyCsrfToken extends BaseVerifier
{
/**
 * The URIs that should be excluded from CSRF verification.
 *
 * @var array
 */
protected $except = [
    'verify',
];
}

这不起作用,所以我尝试禁用整个应用程序的csrf验证:

class Kernel extends HttpKernel
{
protected $middleware = [
    ...
    //'App'Http'Middleware'VerifyCsrfToken::class,
];
protected $routeMiddleware = [
    ...
];
}

那也没用。我在控制台上不断收到此错误:

开机自检 http://domain.name/verify 500(内部服务器错误)

whice 正好指向这一行(验证者的 js 文件):

ajax({url:b,type:"POST",cache:!1,data:g,dataType:"json",error:function(a){return h({valid:!1,message:"Connection failed,状态为: "+a.statusText},f),!1}

我错过了什么?谢谢你的帮助。

命名空间 App''Http''Middleware;

使用 Illuminate''Foundation''Http''Middleware''VerifyCsrfToken 作为 BaseVerifier;

类 VerifyCsrfToken 扩展 BaseVerifier{

protected $except_urls = [
    'verify'
];
public function handle($request, Closure $next)
{
    $regex = '#' . implode('|', $this->except_urls) . '#';
    if ($this->isReading($request) || $this->tokensMatch($request) || preg_match($regex, $request->path()))
    {
        return $this->addCookieToResponse($request, $next($request));
    }
    throw new TokenMismatchException;
}

}

解决了这个问题。

对于Laravel 5及更高版本,在App'Http'Middleware'VerifyCsrfToken.php中添加protected $except = ['verify',];确实可以解决问题。

注意:谷歌的检查工具(网络菜单)帮助我了解了到底发生了什么。