我正在使用laravel实现一个类似/不喜欢的特性。除了异步请求之外,我已经启动并运行了所有东西。我只希望登录用户能够喜欢/不喜欢某一项,因此请求必须在服务器端进行验证。我还希望它是一个异步请求,所以不会刷新页面。
做这件事的好方法是什么?我已经加载了jquery,所以仅仅为了这一点使用角就有点过分了。我该如何保护请求?我读过关于记号的东西,但我不太确定。
发布于 2015-01-18 18:01:40
最好的方法是向您的config.php文件中添加一个csrf过滤器。在默认情况下,Laravel应该为您生成csrf值,但是如果没有,您可以在刀片中使用以下方式。
{{ csrf_token() }}您的ajax可能如下所示。注意,csrf令牌也可能出现在标头标记中,但是我在这里将其放在这里,因为我的代码的工作方式。
$.ajax({
type: "POST",
beforeSend: function(request) {
return request.setRequestHeader('X-CSRF-Token',"{{ csrf_token() }}");
},
url: baseLocalUrl, //this would be your path to your route
data:
{
html: sendHTML //data separated by a comma
},
success: function(data){
alert("Success");
},
error: function(xhr, textStatus, thrownError) {
alert('Failed');
}
});在我的上一个项目中,我有一堆表单和一些带有csrf的ajax,所以我不得不将配置过滤器更改为这个,因为我很难修复这两个表单,所以我在下面创建了下面的过滤器。
Route::filter('csrf', function()
{
$token = Request::ajax() ? Request::header('x-csrf-token') : (Input::get('csrf_token') ?: Input::get('_token'));
$test1 = Session::getToken() != Input::get('csrf_token') && Session::getToken() != Input::get('_token');
$test2 = Session::token() != $token;
if($test2 && $test1){
throw new Illuminate\Session\TokenMismatchException;
}
});Reference提供更多详细信息
https://stackoverflow.com/questions/28012818
复制相似问题