上で述べた通りです:
そしてここで投稿しました:
MiniOrangeについてご存知ですか? フリープランはユーザー数が非常に限られているように見えますし、そのためベーシックプラン(月額49ドル)になるとあなたにとって高価になる可能性があります:
達成したい目標を計画する際には、調査と慎重な読み込みが不可欠です。
WixのVeloスクリプトの書き方はご存知ですか?
おそらくJavaScriptのソリューション
Discourseからのログイン要求を受け取るために、Wixのサイト上に直接カスタムAPIエンドポイントをセットアップする必要があると思います。Veloモジュールの http-functions.js というファイルに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についてもほとんど知識がないため、これが動作するソリューションであるという保証はありません。単に複雑さを示すために、提案された方法の例を提示しているだけです。