使用 Axios Post 时未找到购物车会话

Posted

技术标签:

【中文标题】使用 Axios Post 时未找到购物车会话【英文标题】:Cart session Not Found When Using Axios Post 【发布时间】:2020-04-20 07:06:39 【问题描述】:

我正在尝试使用bumbummen99/LaravelShoppingcart 实现购物车功能,用户可以在其中增加/减少购物车中的商品数量。按“+”或“-”会触发一个名为 updateCart() 的 onclick javascript 函数。

updateCart() 使用 Axios 向我的 CartController@updateCart() 发送一个发布请求,我在其中运行逻辑来更新购物车数量。

问题:提交发布请求后,我无法访问全局购物车会话。

一旦我在 CartController 的 updateCart() 中,我可以访问请求 来自 axios 的变量成功。但是,我无法访问我的 购物车会话。即使我有 正确的 rowId。

我的购物车中有商品,但键入 Cart::content() 或 Cart::get() 返回错误 500,因为它认为我的购物车是空的。

只要我可以检索到我的购物车,我就可以使用 Cart::update() 等实现更新数量的逻辑。请帮助!


点击 + 或 - 触发 updateCart(action,rowId)

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>

<script>
    function updateCart(action,rowId) 
        axios.post('/api/update-cart', 
            action: action,
            rowId: rowId
        ).then(response => console.log(response)).catch(error => 
            console.log(error.response)
        );
    
</script>

Api.php

Route::post('update-cart', 'CartController@updateCart')->name('update-cart');

CartController.php

public function updateCart(Request $request) 

    //works, returns '620d670d95f0419e35f9182695918c68'
    return $request->get('rowId');

    //works, returns 'add' or 'subtract'
    return $request->get('action');

    //fails, returns empty array
    return Cart::content();

    //fails, error 500 because cannot find cart instance
    return Cart::get('620d670d95f0419e35f9182695918c68');

    return 200;

运行时,我无法访问 Cart::content() 和相关的 Cart 函数。它试图返回应该显示我的整个购物车的 Cart::content()。

这是我在任何其他页面上返回 Cart::content() 的时候

【问题讨论】:

【参考方案1】:

您无法访问 API 路由中的会话。

API 基于令牌,而不是会话。阅读“JWT”(JSON Web Token)或“OAuth”或“Laravel Passport”。

如果你真的想要,你仍然可以强制执行会话:

打开app/Http/Kernel.php

查找protected $middlewareGroups =

你应该在哪里看到'api' =&gt; [

只需添加以下内容: \App\Http\Middleware\EncryptCookies::class,

【讨论】:

我会调查一下,感谢您的洞察力。你认为我使用的 Cart 包是在实现会话吗? @ryank 是的。 github.com/bumbummen99/LaravelShoppingcart/blob/master/src/…【参考方案2】:

我建议你在数据库中使用购物车。

假设有人在网络上使用您的 api,然后他被添加到购物车。第二天他回到您的商店,但使用移动应用程序。所以如果我们使用会话,我认为它不能使用 api。但如果使用数据库,您可以根据用户 ID 权限存储购物车数据。

【讨论】:

以上是关于使用 Axios Post 时未找到购物车会话的主要内容,如果未能解决你的问题,请参考以下文章

PHP会话——模拟购物车的功能

Mongoose VersionError:保存文档时未找到与 id 匹配的文档

Mongoose VersionError:保存文档时未找到与 id 匹配的文档

HTTP会话的使用和管理

WooCommerce 中的购物车总数是不是为 0 时未显示付款方式

使用 React Axios POST 请求时未设置 Express Session Cookie