我正在使用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',];
确实可以解决问题。
注意:谷歌的检查工具(网络菜单)帮助我了解了到底发生了什么。