正如我上面所说:
而在这里你发布了:
你对 MiniOrange 了解多少?免费计划似乎仅限少数用户使用,因此如果你使用每月 49 美元的基础计划,费用可能会变得很高:
在规划想要实现的目标时,研究和仔细阅读至关重要。
你会编写 Wix 的 Velo 脚本吗?
也许是一个 JavaScript 解决方案
我认为你需要直接在 Wix 网站上设置一个自定义 API 端点,以接收来自 Discourse 的登录请求。看起来这需要在名为 http-functions.js 的文件中编写 Velo 模块的 JavaScript 代码。
这将拦截来自 Discourse 的用户,重定向并验证其已登录的 Wix 会话,生成一个签名的有效负载,然后希望将他们安全地传回论坛。
也许类似于这样:
import { ok, redirect, badRequest } from 'wix-http-functions';
import { currentMember } from 'wix-members-backend';
import crypto from 'crypto';
// 选择一个安全的随机字符串作为密钥
const DISCOURSE_SECRET = "YOUR_SUPER_SECRET_STRING_HERE";
export async function get_discourseSso(request) {
const query = request.query;
const payload = query.sso;
const sig = query.sig;
if (!payload || !sig) {
return badRequest({ body: "Missing SSO parameters" });
}
// 验证来自 Discourse 的传入签名
const computedSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(payload).digest('hex');
if (computedSig !== sig) {
return badRequest({ body: "Invalid cryptographic signature" });
}
// 检查用户是否已登录 Wix
const member = await currentMember.getMember({ fieldsets: ['FULL'] });
// 解析传入的有效负载以获取唯一的跟踪 nonce
const decodedPayload = Buffer.from(payload, 'base64').toString('ascii');
const params = new URLSearchParams(decodedPayload);
const nonce = params.get('nonce');
if (!member) {
// 如果未登录,强制他们先登录 Wix,然后返回此处
const loginUrl = `https://yourwixsite.com{encodeURIComponent(request.url)}`;
return redirect(loginUrl);
}
// 构建用于 Discourse 的用户有效负载
const userPayload = `nonce=${nonce}&email=${encodeURIComponent(member.loginEmail)}&external_id=${member._id}&username=${encodeURIComponent(member.profile.nickname || member._id)}&name=${encodeURIComponent(member.contactDetails.firstName + ' ' + member.contactDetails.lastName)}`;
// 加密并签署用户有效负载
const base64Payload = Buffer.from(userPayload).toString('base64');
const returnSig = crypto.createHmac('sha256', DISCOURSE_SECRET).update(base64Payload).digest('hex');
// 将已登录用户重定向回 Discourse
const discourseReturnUrl = `https://yourforum.com{encodeURIComponent(base64Payload)}&sig=${returnSig}`;
return redirect(discourseReturnUrl);
}
你还需要替换其中的论坛 URL
此外还需要进行一些 DiscourseConnect 配置,但在你拥有一个实际运行且无错误的自行托管论坛之前,不要进行任何此类操作。
我对这些都不是专家,对 Wix 也知之甚少,所以不能保证这是可行的解决方案。我只是提供一个拟议方法的示例,以说明其复杂性。