我正在使用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}
我错过了什么?谢谢你的帮助。
答案 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的检查工具(网络菜单)帮助我了解了实际发生的情况。