Laravel 5.2 ajax POST 403

时间:2016-02-10 12:29:52

标签: php ajax laravel

我在执行ajax POST时遇到Laravel 5.2的一些问题我收到了403错误

1)Ajax POST请求

$.ajax({
            headers: {
                'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
            },

            data: {category_id:category_id,  _token: $('meta[name="csrf-token"]').attr('content')},
            url: '/admin/gallery/create/ajax',
            method: 'POST',
            success: function(data)
            {
                console.log(data);
                $('#object').empty();
                $('#object').append(data);
            },
            error: function(msg)
            {
                console.log(msg);
            }
        });

2)路线

  Route::post('admin/gallery/create/ajax',           ['as' => 'gallery.ajax',    'uses' => 'GalleryController@getObject']);

3)控制器

public function getObject(Request $request){
        $data = array();
        if($request->category_id == 'users'){
            $allItems = User::all();
            foreach ($allItems as $key => $item) {
                $data += array($key=>'<option value="'.$item['name'].'">'.$item['name'].'</option>');
            }
        }
        if($request->category_id == 'authors'){
            $allItems = Author::all();
            foreach ($allItems as $key => $item) {
                $data += array($key=>'<option value="'.$item['name'].'">'.$item['name'].'</option>');
            }
        }
        if($request->category_id == 'galleries'){
            $allItems = Gallery::all();
            foreach ($allItems as $key => $item) {
                $data += array($key=>'<option value="'.$item['name'].'">'.$item['name'].'</option>');
            }
        }

        return $data;
    }

4)结果

POST 403(禁止)

5)但有路线:

Route::post  ('admin/gallery/create/ajax', function(\Symfony\Component\HttpFoundation\Request $request){
    if (Session::token() == Request::header('x-csrf-token'))
    {
        echo $request->category_id;
    } else {
        return 'ERROR';
    }
});

6)结果

request done

7)GET一切正常

$.ajax({
    headers: {
        'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
    },
    data: {category_id:category_id},
    url: '/admin/gallery/create/ajax/',
    method: 'get',
    success: function(data)
    {
        $('#object').empty();
        $('#object').append(data);
    },
    error: function(msg)
    {
        console.log(msg);// если ошибка, то можно посмотреть в консоле
    }
});

ROUTE GET

Route::get      ('/admin/gallery/create/ajax/',         ['as' => 'gallery.ajax',    'uses' => 'GalleryController@getObject']);
  1. GET RESULT
  2. 9。需要有关AJAX POST的帮助

2 个答案:

答案 0 :(得分:0)

确保已将路由添加到web中间件组。否则,将无法验证令牌。

web中间件组如下所示:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

正如您所见,它会在\App\Http\Middleware\VerifyCsrfToken::class,中验证令牌。

因此,在routes.php文件中,将中间件组添加如下:

Route::group(['middleware' => ['web']], function () {
    // Your route goes here
});

答案 1 :(得分:0)

正确答案 https://stackoverflow.com/a/30508294/5908145

现在使用这个参数:

magnetingHeading

VerifyCsrfToken.php

Route::post     ('/admin/gallery/create/ajax',           ['as' => 'gallery.ajax',    'uses' => 'GalleryController@getObject']);

$.ajax({
            headers: {
                'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
            },
            data: {category_id:category_id,  _token: $('meta[name="csrf-token"]').attr('content')},
            url: '/admin/gallery/create/ajax',
            method: 'POST',
            success: function(data)
            {
                console.log(data);
                $('#object').empty();
                $('#object').append(data);
            },
            error: function(msg)
            {
                console.log(msg);
            }
        });
感谢所有人!