feat(M02-B): 实现微信登录与可撤销会话
This commit is contained in:
@@ -12,6 +12,10 @@ const configSchema = z.object({
|
||||
QIPAI_MYSQL_USER: z.string().min(1).default('qipai_app'),
|
||||
QIPAI_MYSQL_PASSWORD: z.string().default(''),
|
||||
QIPAI_MYSQL_CONNECTION_LIMIT: z.coerce.number().int().min(1).max(50).default(10),
|
||||
QIPAI_JWT_SECRET: z.string().min(32).default('development-only-change-this-jwt-secret'),
|
||||
QIPAI_ACCESS_TOKEN_TTL_SECONDS: z.coerce.number().int().min(60).max(86400).default(900),
|
||||
QIPAI_SESSION_TTL_SECONDS: z.coerce.number().int().min(300).max(2592000).default(604800),
|
||||
QIPAI_WECHAT_APP_SECRETS: z.string().default('{}'),
|
||||
QIPAI_MQTT_URL: z.string().url().default('mqtt://101.42.38.246:1883'),
|
||||
QIPAI_MQTT_USERNAME: z.string().default(''),
|
||||
QIPAI_MQTT_PASSWORD: z.string().default('')
|
||||
@@ -21,6 +25,12 @@ export type AppConfig = ReturnType<typeof loadConfig>;
|
||||
|
||||
export function loadConfig(env: NodeJS.ProcessEnv = process.env) {
|
||||
const parsed = configSchema.parse(env);
|
||||
if (
|
||||
parsed.NODE_ENV === 'production'
|
||||
&& parsed.QIPAI_JWT_SECRET === 'development-only-change-this-jwt-secret'
|
||||
) {
|
||||
throw new Error('QIPAI_JWT_SECRET must be explicitly configured in production.');
|
||||
}
|
||||
|
||||
return {
|
||||
nodeEnv: parsed.NODE_ENV,
|
||||
@@ -37,6 +47,12 @@ export function loadConfig(env: NodeJS.ProcessEnv = process.env) {
|
||||
passwordConfigured: parsed.QIPAI_MYSQL_PASSWORD.length > 0,
|
||||
connectionLimit: parsed.QIPAI_MYSQL_CONNECTION_LIMIT
|
||||
},
|
||||
auth: {
|
||||
jwtSecret: parsed.QIPAI_JWT_SECRET,
|
||||
accessTokenTtlSeconds: parsed.QIPAI_ACCESS_TOKEN_TTL_SECONDS,
|
||||
sessionTtlSeconds: parsed.QIPAI_SESSION_TTL_SECONDS,
|
||||
wechatAppSecretsJson: parsed.QIPAI_WECHAT_APP_SECRETS
|
||||
},
|
||||
mqtt: {
|
||||
url: parsed.QIPAI_MQTT_URL,
|
||||
usernameConfigured: parsed.QIPAI_MQTT_USERNAME.length > 0,
|
||||
|
||||
Reference in New Issue
Block a user