Tự code GitHub OAuth Proxy cho Decap CMS trên Vercel
Hành trình tự build GitHub OAuth Proxy cho Decap CMS trên Vercel (Đang viết dở)
Section titled “Hành trình tự build GitHub OAuth Proxy cho Decap CMS trên Vercel (Đang viết dở)”Dự án:
my-private-docs(Astro 5 + Starlight) Vấn đề: Decap CMS cần backend tĩnh để xác thực với GitHub, nhưng các giải pháp có sẵn đều lỗi.
1. Tại sao các giải pháp có sẵn đều Fail?
Section titled “1. Tại sao các giải pháp có sẵn đều Fail?”Ban đầu, để Decap CMS hoạt động được trên Vercel, mình đã thử 2 cách phổ biến nhất:
-
Cách 1: Netlify Public Proxy (
api.netlify.com)- Lỗi:
Not Found. - Nguyên nhân: Netlify yêu cầu tham số
site_idphải trỏ đúng vào một trang được host trên hạ tầng của Netlify. Domainvercel.cudem.io.vnbị từ chối truy cập API.
- Lỗi:
-
Cách 2: GitHub PKCE Auth (Client-side 100%)
- Cấuhình
auth_type: pkcetrong config. - Thất bại do Starlight chặn CSS khiến render bị trắng bảng, và Vercel không hỗ trợ static callback tốt đối với SPA React của Decap khi kẹp trong Astro build.
- Cấuhình
2. Giải pháp: Tự Build OAuth Provider bằng Node.js (Astro API)
Section titled “2. Giải pháp: Tự Build OAuth Provider bằng Node.js (Astro API)”Thay vì đi vòng vèo, chọn rẽ thẳng: Build luôn một Backend Serverless trên Vercel!
Vercel cho phép chạy API siêu đơn giản. Ta dùng package simple-oauth2 để tạo 2 endpoint Astro:
- Endpoint 1 (
/api/oauth/auth.js): Nhận request từ nút “Login with GitHub”, tự động tạo OAuth URL và Redirect người dùng sang trang Đăng nhập của GitHub. - Endpoint 2 (
/api/oauth/callback.js): Nhận Auth Code từ GitHub trả về, gọi request xin Access Token. Sau thi có Access Token, nhúng mã JSwindow.opener.postMessageđể bơm token ngược lại vào màn hình Decap CMS.
Cấu hình Vercel Environment Variables:
Section titled “Cấu hình Vercel Environment Variables:”Để mã nguồn bảo mật, CẦN config 3 biến môi trường trên Vercel ngay sáng mai:
GITHUB_CLIENT_IDGITHUB_CLIENT_SECRETOAUTH_CALLBACK_URL
(Bài viết sẽ được update tiếp sau khi test thành công trên Vercel vào sáng mai)