fix: IAM баги после ревью
- ui/routes/auth.js: POST /login-token сделан async (был await без async)
- ui/routes/auth.js: IAM enrichment только при auth.isOidc (не в mock-режиме)
- src/auth.js: fetchIamUser, switchProfile возвращаются из initAuth()
- src/routes/oidc.js: auth.fetchIamUser вместо require('../auth') (устранение циклической зависимости)
- ui/routes/auth.js: auth.fetchIamUser вместо require
- tests/api-crud.sh: удалён хардкоженный prod-токен, токен только через аргумент
This commit is contained in:
+25
-21
@@ -68,7 +68,7 @@ function createRouter({ auth, MOCK_USERS, authLimiter }) {
|
||||
router.get('/login-token', (req, res) => res.redirect('/login'));
|
||||
|
||||
// POST /login-token — вход по Bearer JWT токену (реальному) или clientId (отладка)
|
||||
router.post('/login-token', authLimiter, (req, res) => {
|
||||
router.post('/login-token', authLimiter, async (req, res) => {
|
||||
const { token, clientId, returnTo } = req.body;
|
||||
|
||||
// ── Вход по реальному JWT токену ──────────────────────────────────────
|
||||
@@ -96,26 +96,30 @@ function createRouter({ auth, MOCK_USERS, authLimiter }) {
|
||||
|
||||
req.session.token = raw;
|
||||
|
||||
// Пытаемся обогатить через IAM API
|
||||
try {
|
||||
const { fetchIamUser } = require('../../src/auth');
|
||||
const iamData = await fetchIamUser(raw);
|
||||
req.session.user = {
|
||||
email: iamData.email,
|
||||
clientId: iamData.clientId,
|
||||
allClientIds: iamData.allClientIds,
|
||||
activeClientId: iamData.clientId,
|
||||
activeProfileId: iamData.activeProfileId,
|
||||
companyId: iamData.companyId,
|
||||
companyName: iamData.companyName,
|
||||
isAdmin: iamData.isAdmin,
|
||||
fio: iamData.fio,
|
||||
profiles: iamData.profiles,
|
||||
};
|
||||
console.log('[login-token] IAM enrichment OK:', iamData.email, iamData.clientId);
|
||||
} catch (iamErr) {
|
||||
// IAM недоступен — fallback из JWT
|
||||
console.warn('[login-token] IAM enrichment failed, using JWT fallback:', iamErr.message);
|
||||
// Пытаемся обогатить через IAM API (только в OIDC-режиме)
|
||||
if (auth.isOidc) {
|
||||
try {
|
||||
const iamData = await auth.fetchIamUser(raw);
|
||||
req.session.user = {
|
||||
email: iamData.email,
|
||||
clientId: iamData.clientId,
|
||||
allClientIds: iamData.allClientIds,
|
||||
activeClientId: iamData.clientId,
|
||||
activeProfileId: iamData.activeProfileId,
|
||||
companyId: iamData.companyId,
|
||||
companyName: iamData.companyName,
|
||||
isAdmin: iamData.isAdmin,
|
||||
fio: iamData.fio,
|
||||
profiles: iamData.profiles,
|
||||
};
|
||||
console.log('[login-token] IAM enrichment OK:', iamData.email, iamData.clientId);
|
||||
} catch (iamErr) {
|
||||
// IAM недоступен — fallback из JWT
|
||||
console.warn('[login-token] IAM enrichment failed, using JWT fallback:', iamErr.message);
|
||||
}
|
||||
}
|
||||
// Fallback (всегда): базовый user из JWT
|
||||
if (!req.session.user) {
|
||||
req.session.user = {
|
||||
clientId: rawClientId,
|
||||
allClientIds,
|
||||
|
||||
Reference in New Issue
Block a user