fix(together): JWT なし username 認証を復元(Posimai アカウント不要メンバー対応)
This commit is contained in:
parent
45893eb453
commit
4390748534
39
server.js
39
server.js
|
|
@ -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' });
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue