2025-06-24 14:09:12 +08:00

62 lines
1.4 KiB
TypeScript

import bcrypt from 'bcryptjs'
import jwt from 'jsonwebtoken'
import { prisma } from '@/lib/prisma'
import type { NextRequest } from 'next/server'
const JWT_SECRET = process.env.JWT_SECRET || 'your-jwt-secret-here'
export async function hashPassword(password: string): Promise<string> {
return await bcrypt.hash(password, 12)
}
export async function verifyPassword(password: string, hashedPassword: string): Promise<boolean> {
return await bcrypt.compare(password, hashedPassword)
}
export function generateToken(payload: any): string {
return jwt.sign(payload, JWT_SECRET, { expiresIn: '7d' })
}
export function verifyToken(token: string): any {
try {
return jwt.verify(token, JWT_SECRET)
} catch (error) {
return null
}
}
export async function getUser(request: NextRequest) {
try {
const authHeader = request.headers.get('Authorization')
const token = authHeader?.replace('Bearer ', '')
if (!token) {
return null
}
const decoded = verifyToken(token)
if (!decoded || !decoded.userId) {
return null
}
const user = await prisma.user.findUnique({
where: { id: decoded.userId },
select: {
id: true,
email: true,
username: true,
name: true,
phone: true,
address: true,
isAdmin: true,
createdAt: true
}
})
return user
} catch (error) {
console.error('获取用户信息失败:', error)
return null
}
}