与laravel的异步评级(喜欢/不喜欢)

时间:2015-01-18 17:48:09

标签: php jquery laravel asynchronous

我使用laravel实现喜欢/不喜欢的功能。除了异步请求之外,我已经完成了所有操作。我只希望登录用户能够喜欢/不喜欢某个项目,因此必须在服务器端验证请求。我也希望它是一个异步请求,所以没有页面刷新。

这样做的好方法是什么?我已经加载了jquery所以使用角度JUST,这将是一个有点矫枉过正。我该如何保护请求?我已经读过关于令牌的事情,但我对此并不十分肯定。

1 个答案:

答案 0 :(得分:1)

执行此操作的最佳方法是在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了解更多详情