141 lines
4.6 KiB
JavaScript
141 lines
4.6 KiB
JavaScript
"use strict";
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
const hono_1 = require("hono");
|
|
const auth_1 = require("../middlewares/auth");
|
|
const supabase_1 = __importDefault(require("../utils/supabase"));
|
|
const authRouter = new hono_1.Hono();
|
|
// Register a new user
|
|
authRouter.post('/register', async (c) => {
|
|
try {
|
|
const { email, password, name } = await c.req.json();
|
|
// Validate input
|
|
if (!email || !password || !name) {
|
|
return c.json({ error: 'Email, password, and name are required' }, 400);
|
|
}
|
|
// Register user with Supabase
|
|
const { data: authData, error: authError } = await supabase_1.default.auth.signUp({
|
|
email,
|
|
password,
|
|
});
|
|
if (authError) {
|
|
return c.json({ error: authError.message }, 400);
|
|
}
|
|
if (!authData.user) {
|
|
return c.json({ error: 'Failed to create user' }, 500);
|
|
}
|
|
// Create user profile in the database
|
|
const { error: profileError } = await supabase_1.default
|
|
.from('users')
|
|
.insert({
|
|
id: authData.user.id,
|
|
email: authData.user.email,
|
|
name,
|
|
created_at: new Date().toISOString(),
|
|
});
|
|
if (profileError) {
|
|
// Attempt to clean up the auth user if profile creation fails
|
|
await supabase_1.default.auth.admin.deleteUser(authData.user.id);
|
|
return c.json({ error: profileError.message }, 500);
|
|
}
|
|
// Generate JWT token
|
|
const token = (0, auth_1.generateToken)(authData.user.id, authData.user.email);
|
|
return c.json({
|
|
message: 'User registered successfully',
|
|
user: {
|
|
id: authData.user.id,
|
|
email: authData.user.email,
|
|
name,
|
|
},
|
|
token,
|
|
}, 201);
|
|
}
|
|
catch (error) {
|
|
console.error('Registration error:', error);
|
|
return c.json({ error: 'Internal server error' }, 500);
|
|
}
|
|
});
|
|
// Login user
|
|
authRouter.post('/login', async (c) => {
|
|
try {
|
|
const { email, password } = await c.req.json();
|
|
const { data, error } = await supabase_1.default.auth.signInWithPassword({
|
|
email,
|
|
password
|
|
});
|
|
if (error) {
|
|
return c.json({ error: error.message }, 400);
|
|
}
|
|
// 使用与 authMiddleware 一致的方式创建 JWT
|
|
const token = (0, auth_1.generateToken)(data.user.id, data.user.email || '');
|
|
// 只返回必要的用户信息和令牌
|
|
return c.json({
|
|
success: true,
|
|
token,
|
|
user: {
|
|
id: data.user.id,
|
|
email: data.user.email
|
|
}
|
|
});
|
|
}
|
|
catch (error) {
|
|
console.error(error);
|
|
return c.json({ error: 'Server error' }, 500);
|
|
}
|
|
});
|
|
// Verify token
|
|
authRouter.get('/verify', async (c) => {
|
|
try {
|
|
const token = c.req.header('Authorization')?.split(' ')[1];
|
|
if (!token) {
|
|
return c.json({ error: 'No token provided' }, 401);
|
|
}
|
|
const user = await (0, auth_1.verifySupabaseToken)(token);
|
|
if (!user) {
|
|
return c.json({ error: 'Invalid token' }, 401);
|
|
}
|
|
return c.json({
|
|
message: 'Token is valid',
|
|
user: {
|
|
id: user.id,
|
|
email: user.email,
|
|
},
|
|
});
|
|
}
|
|
catch (error) {
|
|
console.error('Token verification error:', error);
|
|
return c.json({ error: 'Internal server error' }, 500);
|
|
}
|
|
});
|
|
// Refresh token
|
|
authRouter.post('/refresh-token', async (c) => {
|
|
try {
|
|
const token = c.req.header('Authorization')?.split(' ')[1];
|
|
if (!token) {
|
|
return c.json({ error: 'No token provided' }, 401);
|
|
}
|
|
// 验证当前token
|
|
const user = await (0, auth_1.verifySupabaseToken)(token);
|
|
if (!user) {
|
|
return c.json({ error: 'Invalid token' }, 401);
|
|
}
|
|
// 生成新token
|
|
const newToken = (0, auth_1.generateToken)(user.id, user.email || '');
|
|
return c.json({
|
|
message: 'Token refreshed successfully',
|
|
token: newToken,
|
|
user: {
|
|
id: user.id,
|
|
email: user.email,
|
|
},
|
|
});
|
|
}
|
|
catch (error) {
|
|
console.error('Token refresh error:', error);
|
|
return c.json({ error: 'Internal server error' }, 500);
|
|
}
|
|
});
|
|
exports.default = authRouter;
|