文件
jw-beauty/cloud/common/auth.js
T

63 行
1.5 KiB
JavaScript

var jwt = require('jsonwebtoken')
var JWT_SECRET = process.env.JWT_SECRET || 'hox_jwt_secret_change_in_production'
var JWT_EXPIRES_IN = '7d'
function generateToken(userId, openid) {
return jwt.sign(
{ user_id: userId, openid: openid },
JWT_SECRET,
{ expiresIn: JWT_EXPIRES_IN }
)
}
function verifyToken(token) {
try {
return jwt.verify(token, JWT_SECRET)
} catch (e) {
return null
}
}
function generateAdminToken(adminId, username, role) {
return jwt.sign(
{ admin_id: adminId, username: username, role: role, type: 'admin' },
JWT_SECRET,
{ expiresIn: JWT_EXPIRES_IN }
)
}
function extractToken(event) {
var header = event.headers || {}
var auth = header['Authorization'] || header['authorization'] || header['authorization'] || ''
if (auth.startsWith('Bearer ')) {
return auth.substring(7)
}
return null
}
function extractUser(event) {
var token = extractToken(event)
if (!token) return null
var decoded = verifyToken(token)
if (!decoded || decoded.type === 'admin') return null
return decoded
}
function extractAdmin(event) {
var token = extractToken(event)
if (!token) return null
var decoded = verifyToken(token)
if (!decoded || decoded.type !== 'admin') return null
return decoded
}
module.exports = {
generateToken: generateToken,
verifyToken: verifyToken,
generateAdminToken: generateAdminToken,
extractToken: extractToken,
extractUser: extractUser,
extractAdmin: extractAdmin
}