我有一个在Laravel 5.5上运行的Web应用程序,我需要使用ajax创建一个购物车(我有理由)。
当用户登录时,所有用户都可以顺利运行。当用户未登录时,我得到一个空的响应。
路线:
Route::post('/shop/add2', 'ShopController@addToCart')->name('add2cart');
ShopController看起来像:
<?php
class ShopController extends Controller
{
public static function addToCart(){
$message = "Some message";
return response()->json(["message"=>$message]);
}
}
?>
Jquery是:
var token = $('[name="_token"]').val();
var var1 = $(this).data('itemcom');
var var2_ = $(this).data('itemvalue');
$.ajax({
url: '/shop/add2',
type: 'POST',
data: {_token: token, identX:var2_, identY:var1 },
dataType: 'JSON',
success: function(response) {
console.log(JSON.stringify(response));
},
error : function(errors){
console.log(JSON.stringi(errors));
}
});
我尽我所能,得到419状态代码。我知道,对吧?
嗯,我有一个强大的devaju代码419 ......并不是一个好的。我不得不调试半天,因为在facebook的webhook路由中缺少Csrf令牌。也许你的情况类似?
class VerifyCsrfToken extends Middleware
{
const FACEBOOK_ROUTE = 'facebook_hook';
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
self::FACEBOOK_ROUTE,
self::FACEBOOK_ROUTE . '/*',
'upload',
'upload/*',
];
我的上传也是如此,这也是由第三方ajax插件完成的。
干杯
如果您不介意每个人都可以访问此函数,您可以在Controller的构造函数中向中间件添加一个例外:
public function __construct()
{
$this->middleware('auth', ['except' => ['addToCart']]);
}