禁用csrf进行ajax查询

时间:2016-01-26 15:53:41

标签: javascript php jquery ajax laravel-5

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

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

正如documentation中所述,我只需要将我的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 = [
    ...
];
}

这也不起作用。我一直在控制台上收到此错误:

  

POST http://domain.name/verify 500(内部服务器错误)

确切地指向此行(验证者的js文件):

  

ajax({url:b,type:“POST”,cache:!1,data:g,dataType:“json”,error:function(a){return h({valid:!1,message:“连接失败,状态为:“+ a.statusText},f),!1}

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

2 个答案:

答案 0 :(得分:0)

命名空间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;
}

}

答案 1 :(得分:0)

解决了这个问题。

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

注意:Google的检查工具(网络菜单)帮助我了解了实际发生的情况。