码桶
发现社区成员的开源项目
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 });
};