码桶

发现社区成员的开源项目

auth.js1.5 KB
/**
 * Vercel Serverless Function - 密碼驗證
 * 密碼從環境變量 ADMIN_PASSWORD 讀取,前端永遠看不到
 */

module.exports = async (req, res) => {
  // CORS
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');

  if (req.method === 'OPTIONS') {
    return res.status(200).end();
  }

  if (req.method !== 'POST') {
    return res.status(405).json({ error: 'Method Not Allowed' });
  }

  // 解析 body
  let body = req.body;
  if (typeof body === 'string') {
    try {
      body = JSON.parse(body);
    } catch (e) {
      return res.status(400).json({ success: false, error: 'Invalid JSON' });
    }
  }

  const password = (body && body.password) || '';
  const adminPassword = process.env.ADMIN_PASSWORD || '';

  // 如果沒有設置環境變量,拒絕所有請求
  if (!adminPassword) {
    return res.status(200).json({
      success: false,
      error: 'ADMIN_PASSWORD environment variable is not set'
    });
  }

  if (password && password === adminPassword) {
    // 生成簡單的會話令牌(有效期到當天結束)
    const today = new Date().toISOString().slice(0, 10);
    const token = Buffer.from(`${adminPassword}:${today}`).toString('base64');
    return res.status(200).json({ success: true, token });
  }

  return res.status(200).json({ success: false });
};