fix(together): JWT なし username 認証を復元(Posimai アカウント不要メンバー対応)

This commit is contained in:
posimai 2026-04-22 09:37:11 +09:00
parent 45893eb453
commit 4390748534
1 changed files with 24 additions and 15 deletions

View File

@ -807,24 +807,33 @@ async function togetherEnsureMember(pool, res, groupId, username, jwtUserId) {
return false; return false;
} }
try { try {
if (!jwtUserId) { if (jwtUserId) {
res.status(401).json({ error: '認証が必要です' }); const strict = await pool.query(
`SELECT 1 FROM together_members m
WHERE m.group_id = $1 AND (
m.user_id = $2
OR (
(m.user_id IS NULL OR btrim(COALESCE(m.user_id, '')) = '')
AND m.username = ANY($3::text[])
)
)`,
[gidNum, jwtUserId, usernames]
);
if (strict.rows.length > 0) return true;
res.status(403).json({ error: 'グループのメンバーではありません' });
return false; return false;
} }
const strict = await pool.query( // JWT なし: username のみで照合Together は Posimai アカウント不要のため継続許容)
`SELECT 1 FROM together_members m const primaryUsername = usernames[0];
WHERE m.group_id = $1 AND ( const legacyOnly = await pool.query(
m.user_id = $2 'SELECT 1 FROM together_members WHERE group_id=$1 AND username=$2',
OR ( [gidNum, primaryUsername]
(m.user_id IS NULL OR btrim(COALESCE(m.user_id, '')) = '')
AND m.username = ANY($3::text[])
)
)`,
[gidNum, jwtUserId, usernames]
); );
if (strict.rows.length > 0) return true; if (legacyOnly.rows.length === 0) {
res.status(403).json({ error: 'グループのメンバーではありません' }); res.status(403).json({ error: 'グループのメンバーではありません' });
return false; return false;
}
return true;
} catch (e) { } catch (e) {
console.error('[Together] togetherEnsureMember', e.message); console.error('[Together] togetherEnsureMember', e.message);
res.status(500).json({ error: 'Internal server error' }); res.status(500).json({ error: 'Internal server error' });