All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 4m33s
接入流程:
- src/lib/sms.ts: 封装 sendOtpSms(phone, code), 走 dysmsapi.aliyuncs.com 全局端点
- /api/auth/send-otp:
* 生成 6 位验证码 → Redis 5min TTL
* 调 Aliyun SDK 发送; OK → 200, isv.* 错误 → 422, 其它 → 500
* SMS_NOT_CONFIGURED 时 dev 仍能 console.log 验证码联调
- auth.ts verifyOtp:
* dev 万能码 123456 保留
* 否则 redis.get(sms:otp:phone) 比对, 通过后 del 防重放
* Redis 未配置时 prod 拒绝, dev 接受任意 6 位
环境变量 (.env.local, 不入仓库):
- SMS_ACCESS_KEY / SMS_SECRET_KEY (RAM 子账号)
- SMS_SIGN_NAME (例: 广州气元科技)
- SMS_TEMPLATE_CODE (例: SMS_506210397)
依赖:
+ @alicloud/dysmsapi20170525
+ @alicloud/openapi-client
+ @alicloud/tea-util
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
48 lines
1.2 KiB
JSON
48 lines
1.2 KiB
JSON
{
|
|
"name": "cyber-star",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "prisma generate && next build",
|
|
"start": "next start",
|
|
"lint": "eslint",
|
|
"postinstall": "prisma generate",
|
|
"db:push": "prisma db push",
|
|
"db:migrate": "prisma migrate dev",
|
|
"db:studio": "prisma studio",
|
|
"db:seed": "tsx prisma/seed.ts"
|
|
},
|
|
"dependencies": {
|
|
"@alicloud/dysmsapi20170525": "^4.5.1",
|
|
"@alicloud/openapi-client": "^0.4.15",
|
|
"@alicloud/tea-util": "^1.4.11",
|
|
"@auth/prisma-adapter": "^2.11.2",
|
|
"@prisma/client": "^6.19.3",
|
|
"clsx": "^2.1.1",
|
|
"framer-motion": "^12.38.0",
|
|
"ioredis": "^5.10.1",
|
|
"lucide-react": "^1.14.0",
|
|
"next": "16.2.6",
|
|
"next-auth": "5.0.0-beta.31",
|
|
"prisma": "^6.19.3",
|
|
"react": "19.2.4",
|
|
"react-dom": "19.2.4",
|
|
"react-hot-toast": "^2.6.0",
|
|
"tailwind-merge": "^3.6.0",
|
|
"zod": "^4.4.3",
|
|
"zustand": "^5.0.13"
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/postcss": "^4",
|
|
"@types/node": "^20",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "16.2.6",
|
|
"tailwindcss": "^4",
|
|
"tsx": "^4.21.0",
|
|
"typescript": "^6.0.3"
|
|
}
|
|
}
|