为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我不能使用 Vue 初始化一个 Channel?

为什么我不能使用 Vue 初始化一个 Channel?

PHP
慕村9548890 2022-12-30 17:00:44
我在尝试初始化频道时遇到问题。我遵循了提供的一些教程(https://getstream.io/blog/chat-messaging-with-laravel/,https://getstream.io/blog/tutorial-build-customer-support-chat-with-laravel -vue-and-stream/ ) 有一个堆栈作为我的 (Laravel + Vue)我已经在后端获取令牌,初始化客户端,在客户端设置用户和令牌。但是当我尝试做this.channel.watch();一个简单的频道查询时const filter = { type: 'messages', id: '1000056864'};                const sort = { last_message_at: -1 };                const channels = await this.client.queryChannels(filter, sort, {                    watch: true,                    state: true,                });它将返回给我错误如下:在' https://chat-us-east-1.stream-io-api.com/channels/messages/1000056864/query?user_id=62&api_key=2e ******e2&connection_id=5983f850-3d50-访问 XMLHttpRequest来自来源“ http://local.site.test ”的 4ac3-9c06-d9e0fdaf7212'已被 CORS 策略阻止:请求标头字段 x-csrf-token 不允许在预检响应中访问控制允许标头。一切都在后端工作,甚至是等效的调用。
查看完整描述

1 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

根据您收到的错误,您似乎将 CSRF 令牌包含在所有 AJAX 请求中。Stream API 服务器有一个您可以传递的标头白名单,这是为了防止开发人员意外发送敏感数据。在这种特定情况下,csrf-token为了便于使用,是否可以列入此类白名单是有争议的。


也许您正在前端使用类似的东西?


$.ajaxSetup({

    headers: {

        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')

    }

});

如果是这种情况,我的建议是选择更细粒度的解决方案,例如:


$.ajaxSetup({

    url: "/laravel/",

    headers: {

        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')

    }

});

或者确保只有你的 Laravel 后端通过提取执行 Ajax 调用的 JS 代码来接收 CSRF 令牌。


CSRF 令牌不如会话 ID 有价值,但它们的存在是为了让您的应用程序更安全,并且不打算与第三方共享。


查看完整回答
反对 回复 2022-12-30
  • 1 回答
  • 0 关注
  • 51 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信