Google нэвтрэлтийг идэвхжүүлэх
Хэрэглэгч Login → Continue with Google → дансаа сонгох дарааллаар нэвтэрнэ. Үүний өмнө сайтын эзэмшигч доорх тохиргоог нэг удаа хийнэ. Google-ийн нууц үгийг Music247 дээр оруулахгүй.
Энэ байршуулалтын төлөв
Тохиргоог шалгаж байна…
Зөвхөн тохиргоо байгаа эсэхийг шалгана. Google түлхүүр зөв эсэх, Google Console дахь redirect URI болон бодит нэвтрэлтийг энд баталгаажуулахгүй. Нууц түлхүүр, хэрэглэгчийн мэдээлэл харуулахгүй, ямар ч тохиргоо өөрчлөхгүй.
1. Cloudflare D1 өгөгдлийн сан
Cloudflare → Storage & databases → D1 SQL database хэсэгт music247-auth нэртэй сан үүсгэнэ. Console хэсэгт доорх SQL-ийг ажиллуулна. Өмнө нь бүрэн тохируулсан санг устгах, дахин үүсгэх шаардлагагүй.
D1 хүснэгт үүсгэх SQL
PRAGMA foreign_keys = ON; CREATE TABLE IF NOT EXISTS users (id TEXT PRIMARY KEY, email TEXT NOT NULL DEFAULT '', display_name TEXT NOT NULL DEFAULT '', created_at INTEGER NOT NULL); CREATE TABLE IF NOT EXISTS identities (provider TEXT NOT NULL, subject TEXT NOT NULL, user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, PRIMARY KEY(provider,subject)); CREATE INDEX IF NOT EXISTS idx_identities_user ON identities(user_id); CREATE TABLE IF NOT EXISTS sessions (token_hash TEXT PRIMARY KEY, user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE, csrf TEXT NOT NULL, created_at INTEGER NOT NULL, expires_at INTEGER NOT NULL); CREATE INDEX IF NOT EXISTS idx_sessions_expiry ON sessions(expires_at); CREATE TABLE IF NOT EXISTS email_codes (id TEXT PRIMARY KEY, email TEXT NOT NULL, code_hash TEXT NOT NULL, binding_hash TEXT NOT NULL, attempts INTEGER NOT NULL DEFAULT 0, created_at INTEGER NOT NULL, expires_at INTEGER NOT NULL, used_at INTEGER); CREATE INDEX IF NOT EXISTS idx_email_expiry ON email_codes(expires_at); CREATE TABLE IF NOT EXISTS oauth_states (state_hash TEXT PRIMARY KEY, provider TEXT NOT NULL, binding_hash TEXT NOT NULL, nonce TEXT NOT NULL, verifier TEXT NOT NULL DEFAULT '', expires_at INTEGER NOT NULL); CREATE TABLE IF NOT EXISTS rate_limits (bucket TEXT PRIMARY KEY, hits INTEGER NOT NULL DEFAULT 1, expires_at INTEGER NOT NULL); CREATE INDEX IF NOT EXISTS idx_rate_expiry ON rate_limits(expires_at);
Workers & Pages → Music247 төсөл → Settings → Bindings → Add → D1 database. Variable name-ийг яг DB гэж бичээд үүсгэсэн сантай холбоно.
2. Google Cloud дээр Music247-ийг бүртгэх
Google Auth Platform нээх. Өөрийн Music247 төслийг сонгох эсвэл шинээр үүсгэнэ. Branding хэсэгт нэр, эзэмшигчийн support/contact имэйлийг оруулна. Олон нийтэд зориулсан сайт тул Audience-ийг External сонгоно. Data Access-д зөвхөн openid email profile хүрээ ашиглана; Gmail, Drive унших эрх шаардахгүй.
Clients → Create client → Web application. Desktop app эсвэл API key сонгохгүй. Доорх утгуудыг хуулж оруулна.
Серверийн redirect урсгалд JavaScript origin шаардлагагүй ч бүртгэвэл зөвхөн үндсэн origin-ийг оруулна. Client Secret-ийг frontend JavaScript-д огт оруулахгүй.
/api/auth/oauth/google/callback зам дахь oauth хэсгийг орхиж болохгүй. Preview домэйн биш, тогтвортой үндсэн домэйнээ ашиглана. Create дарж Client ID болон Client Secret-ээ өөртөө хадгална.
Audience хэсэгт нийтэд ашиглуулах publishing status-аа тохируулна. Google-ээс шаардсан consent, branding, домэйн болон policy мэдээллийг бүрдүүлнэ. Testing орчинд өөрийн дансаар эхэлж туршина; таны Google төслийн шаардлагаас хамаарч Test users эсвэл verification хэрэгтэй байж болно.
3. Cloudflare-д утгуудыг оруулах
Music247 төсөл → Settings → Variables and Secrets → Production орчин. Add дарж дараах утгуудыг тохируулна.
| Нэр | Төрөл | Утга |
|---|---|---|
APP_ORIGIN | Text | HTTPS үндсэн домэйн, төгсгөлд / нэмэхгүй.|
APP_SECRET | Secret / Encrypt | Шинээр үүсгэсэн хүчтэй санамсаргүй утга. 32-оос доошгүй тэмдэгт.|
GOOGLE_CLIENT_ID | Text | Google-ийн Web application Client ID.|
GOOGLE_CLIENT_SECRET | Secret / Encrypt | Тэр Client ID-д харгалзах Client Secret.
Шинэ APP_SECRET-ийг өөрийн компьютер дээр Node.js ашиглан үүсгэх команд:
node -e "console.log(require('node:crypto').randomBytes(48).toString('base64url'))"
Гарсан нууц утгыг Cloudflare-ийн Secret хэсэгт л хадгална. ZIP, site-config.js, screenshot эсвэл чатад битгий оруулаарай. Одоо ашиглаж буй APP_SECRET-ээ шаардлагагүйгээр солихгүй.
Google нэвтрэлтэд RESEND_API_KEY, имэйл илгээгч эсвэл YouTube API key шаардлагагүй. Имэйлээр код авч нэвтрэх сонголт нь тусдаа RESEND_API_KEY болон баталгаажсан OTP_FROM_EMAIL тохиргоотой. Facebook / Apple мөн өөрсдийн client тохиргоотой.
4. Дахин байршуулж, бодитоор нэвтрэх
Cloudflare дээр тохиргоогоо хадгалсны дараа Create a new deployment → Production сонгон Music247_Direct_Upload_v1.5.1.zip-ийг байршуулна. Энэ хуудсыг дахин нээгээд “Дахин шалгах” дарна.
Дараа нь нүүр хуудас → SKIP NOW → Login → Continue with Google. Google-ийн өөрийн хуудсанд хадгалсан дансуудаас сонгоно. Шаардлагатай зөвшөөрлийг өгсний дараа Music247 руу буцаж, Account харагдах ёстой. Google данс нэвтрээгүй, session дууссан эсвэл хамгаалалтын шалгалт шаардвал Google дахин нэвтрэхийг хүсэж болно.
Music247 нь Google-ийн баталгаажуулсан мэдээллийг сервер дээр шалгасны дараа л session үүсгэнэ. Хөгжим автоматаар асахгүй, Playlist албадан нээгдэхгүй.
Алдаа гарвал
redirect_uri_mismatch: дээрх callback-ийг Google-ийн Authorized redirect URIs-т яг ижил оруулсан эсэхийг шалгана.
invalid_client: Client ID ба Secret нэг Web application-ых мөн эсэхийг шалгана. Secret-ийг шинээр үүсгэсэн бол Cloudflare-д шинэчилж дахин deploy хийнэ.
DB/schema: Production-ийн D1 binding нэр DB мөн эсэх, SQL хүснэгтүүд үүссэн эсэхийг шалгана.
APP_ORIGIN: хаягийн мөрөн дэх үндсэн HTTPS домэйнтэй ижил байх ёстой. Preview болон www/үндсэн домэйн зөрвөл зөв домэйн руу орно.
Access blocked / access_denied: Google төслийн Audience, publishing status, policy/verification болон тухайн Google дансны байгууллагын хязгаарлалтыг шалгана.
Account харагдахгүй: HTTPS, first-party cookies зөвшөөрөгдсөн эсэх, нэг домэйнээр нэвтэрч буцаж байгаа эсэхийг шалгана.