تثبيت Discourse على خادم VPS مخصص. عملية تتضمن الأسئلة الشائعة

كما قلت أعلاه:

وهنا قمت بنشر:

ما الذي تعرفه عن MiniOrange؟ يبدو أن الخطة المجانية محدودة بعدد قليل من المستخدمين فقط، وبالتالي قد تكون مكلفة بالنسبة لك بـ 49 دولاراً شهرياً للخطة الأساسية:

البحث والقراءة الدقيقة أمران ضروريان عند التخطيط لما تريد تحقيقه.

هل تعرف كيفية كتابة سكريبت Velo لـ Wix؟

ربما حل JavaScript

أعتقد أنك ستحتاج إلى إعداد نقطة نهاية API مخصصة مباشرة على موقع Wix الخاص بك لاستقبال طلبات تسجيل الدخول من Discourse. يبدو أنه سيتطلب كود JavaScript في وحدة Velo مع ملف يُسمى http-functions.js.

سيقوم هذا باعتراض المستخدم من Discourse، وإعادة توجيهه والتحقق من جلسة تسجيل الدخول الخاصة به في Wix، وإنشاء حمولة موقعة ثم hopefully إعادته بأمان إلى المنتدى.

شيء ما على هذا النحو ربما:

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'] });
    
    // تحليل الحمولة الواردة لاسترداد رمز التعريف الفريد

    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، لذا لا توجد ضمانات بأن هذا هو الحل العامل. أنا فقط أقدم لك مثالاً على طريقة مقترحة لتوضيح التعقيد.