63 行
1.5 KiB
JavaScript
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
|
|
}
|