이메일 인증 재발송과 관리자 승인 개선
This commit is contained in:
@@ -69,7 +69,8 @@ export function createAdminRouter(db) {
|
||||
`).get(like, like, like).c;
|
||||
rows = db.prepare(`
|
||||
SELECT id, email, username, display_name AS displayName, avatar_url AS avatarUrl,
|
||||
role, is_active AS isActive, last_login_at AS lastLoginAt,
|
||||
role, is_active AS isActive, email_verified_at AS emailVerifiedAt,
|
||||
last_login_at AS lastLoginAt,
|
||||
created_at AS createdAt, updated_at AS updatedAt
|
||||
FROM users
|
||||
WHERE email LIKE ? OR username LIKE ? OR display_name LIKE ?
|
||||
@@ -79,7 +80,8 @@ export function createAdminRouter(db) {
|
||||
total = db.prepare('SELECT COUNT(*) AS c FROM users').get().c;
|
||||
rows = db.prepare(`
|
||||
SELECT id, email, username, display_name AS displayName, avatar_url AS avatarUrl,
|
||||
role, is_active AS isActive, last_login_at AS lastLoginAt,
|
||||
role, is_active AS isActive, email_verified_at AS emailVerifiedAt,
|
||||
last_login_at AS lastLoginAt,
|
||||
created_at AS createdAt, updated_at AS updatedAt
|
||||
FROM users ORDER BY created_at DESC LIMIT ? OFFSET ?
|
||||
`).all(Number(limit), offset);
|
||||
@@ -102,7 +104,8 @@ export function createAdminRouter(db) {
|
||||
router.get('/users/:id', (req, res) => {
|
||||
const user = db.prepare(`
|
||||
SELECT id, email, username, display_name AS displayName, avatar_url AS avatarUrl,
|
||||
role, is_active AS isActive, last_login_at AS lastLoginAt,
|
||||
role, is_active AS isActive, email_verified_at AS emailVerifiedAt,
|
||||
last_login_at AS lastLoginAt,
|
||||
created_at AS createdAt, updated_at AS updatedAt
|
||||
FROM users WHERE id = ?
|
||||
`).get(req.params.id);
|
||||
@@ -210,7 +213,8 @@ export function createAdminRouter(db) {
|
||||
|
||||
const updated = db.prepare(`
|
||||
SELECT id, email, username, display_name AS displayName, avatar_url AS avatarUrl,
|
||||
role, is_active AS isActive, last_login_at AS lastLoginAt,
|
||||
role, is_active AS isActive, email_verified_at AS emailVerifiedAt,
|
||||
last_login_at AS lastLoginAt,
|
||||
created_at AS createdAt, updated_at AS updatedAt
|
||||
FROM users WHERE id = ?
|
||||
`).get(targetId);
|
||||
@@ -219,6 +223,38 @@ export function createAdminRouter(db) {
|
||||
res.json({ user: updated });
|
||||
});
|
||||
|
||||
router.post('/users/:id/verify-email', (req, res) => {
|
||||
const targetId = Number(req.params.id);
|
||||
const user = db.prepare(`
|
||||
SELECT id, email_verified_at AS emailVerifiedAt
|
||||
FROM users WHERE id = ?
|
||||
`).get(targetId);
|
||||
if (!user) {
|
||||
return res.status(404).json({ error: '사용자를 찾을 수 없습니다.' });
|
||||
}
|
||||
|
||||
const verifiedAt = user.emailVerifiedAt || nowIso();
|
||||
const transaction = db.transaction(() => {
|
||||
db.prepare(`
|
||||
UPDATE users
|
||||
SET email_verified_at = ?, updated_at = ?
|
||||
WHERE id = ?
|
||||
`).run(verifiedAt, nowIso(), targetId);
|
||||
db.prepare(`
|
||||
UPDATE auth_tokens
|
||||
SET used_at = ?
|
||||
WHERE user_id = ? AND type = 'verify_email' AND used_at IS NULL
|
||||
`).run(nowIso(), targetId);
|
||||
});
|
||||
transaction();
|
||||
|
||||
res.json({
|
||||
ok: true,
|
||||
emailVerifiedAt: verifiedAt,
|
||||
message: '이메일 인증을 승인했습니다.',
|
||||
});
|
||||
});
|
||||
|
||||
router.post('/users/:id/reset-password', (req, res) => {
|
||||
const user = db.prepare('SELECT id FROM users WHERE id = ?').get(req.params.id);
|
||||
if (!user) {
|
||||
|
||||
Reference in New Issue
Block a user