init
This commit is contained in:
140
backend/dist/routes/auth.js
vendored
Normal file
140
backend/dist/routes/auth.js
vendored
Normal file
@@ -0,0 +1,140 @@
|
||||
"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;
|
||||
Reference in New Issue
Block a user