我有这个控制器:
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');
)};
我得到了
未经授权
答案 0 :(得分:1)
当您在控制器中使用用户会话时,请确保您的路由应放在 web 中间件下,以便用户会话处理正确。
但是,为了使其正常工作,您需要确保将 XSRF令牌与AJAX请求一起传递。您将在Laravel创建的 XSRF-TOKEN Cookie中找到该令牌。您需要在请求的 X-XSRF-TOKEN 标题中传递它。
关于 auth 中间件,您应该仅为需要用户进行身份验证的请求将其添加到请求中。