我应该在哪里放置路线

时间:2016-08-15 12:55:45

标签: php laravel laravel-5 laravel-5.2

我有这个控制器:

 public function watchlist(Request $request)
    {
        if($request->ajax())
        {
            $id=$request->id;
            if($id)
            {
                $add=new Watchlist();
                $add->product_id=$id;

                if(!Auth::check())
                {            
                    echo json_encode(FALSE);die;                        
                }

                $add->user_id=Auth::user()->id;      
                $add->save();        
                echo json_encode(TRUE);die;
            }

            echo json_encode(FALSE);die;
        }
    }

,路线是:

Route::post('/product/watchlist', 'ProductController@watchlist');

我应该在哪里放置这条路线? 如果我把这条路线放在auth和web中间件组下我得到了

  

令牌不匹配异常。

Route::group(['middleware' => ['web']], function () {
    Route::get('/product/addform', 'ProductController@addform');    
    Route::post('/product/add', 'ProductController@add');

   Route::group(['middleware' => ['auth']], function () {
        Route::get('/','ProductController@index');  
        Route::get('/product','ProductController@index');               
        Route::post('/product/watchlist', 'ProductController@watchlist'); //here
    });
});

如果我把它放在web和auth中间件组之外

  

我无法获得我需要的用户的身份。

如果我把它放在Web中间件组之外的新的auth中间件组

 Route::group(['middleware' => ['auth']], function () {
                 Route::post('/product/watchlist', 'ProductController@watchlist');
    )};    

我得到了

  

未经授权

1 个答案:

答案 0 :(得分:1)

当您在控制器中使用用户会话时,请确保您的路由应放在 web 中间件下,以便用户会话处理正确。

但是,为了使其正常工作,您需要确保将 XSRF令牌与AJAX请求一起传递。您将在Laravel创建的 XSRF-TOKEN Cookie中找到该令牌。您需要在请求的 X-XSRF-TOKEN 标题中传递它。

关于 auth 中间件,您应该仅为需要用户进行身份验证的请求将其添加到请求中。