feat: enrich VK OAuth with firstName/lastName/gender/avatar

This commit is contained in:
Kirill
2026-05-20 10:53:58 +05:00
parent 32a4406cb8
commit d2d2f721cd
+15 -6
View File
@@ -118,12 +118,14 @@ export async function registerOAuthSocialRoutes(fastify) {
let firstName = null let firstName = null
let lastName = null let lastName = null
let gender = null
let avatar = null
try { try {
if (accessTokenVk && vkUserId) { if (accessTokenVk && vkUserId) {
const u = new URL('https://api.vk.com/method/users.get') const u = new URL('https://api.vk.com/method/users.get')
u.searchParams.set('access_token', accessTokenVk) u.searchParams.set('access_token', accessTokenVk)
u.searchParams.set('users_ids', String(vkUserId)) u.searchParams.set('users_ids', String(vkUserId))
u.searchParams.set('fields', 'photo_50') u.searchParams.set('fields', 'photo_200,sex')
u.searchParams.set('v', '5.199') u.searchParams.set('v', '5.199')
const profRes = await fetch(u.toString()) const profRes = await fetch(u.toString())
const prof = await profRes.json() const prof = await profRes.json()
@@ -131,6 +133,9 @@ export async function registerOAuthSocialRoutes(fastify) {
if (u0) { if (u0) {
firstName = u0.first_name ?? null firstName = u0.first_name ?? null
lastName = u0.last_name ?? null lastName = u0.last_name ?? null
avatar = u0.photo_200 ?? null
if (u0.sex === 1) gender = 'female'
else if (u0.sex === 2) gender = 'male'
} }
} }
} catch { } catch {
@@ -144,11 +149,15 @@ export async function registerOAuthSocialRoutes(fastify) {
suggestedEmail: emailSuggestion, suggestedEmail: emailSuggestion,
}) })
if (firstName || lastName) { const displayName = [firstName, lastName].filter(Boolean).join(' ').trim()
const name = [firstName, lastName].filter(Boolean).join(' ').trim() const updateData = {}
if (name && !user.name) { if (displayName && !user.displayName) updateData.displayName = displayName
await prisma.user.update({ where: { id: user.id }, data: { name } }) if (firstName) updateData.firstName = firstName
} if (lastName) updateData.lastName = lastName
if (gender) updateData.gender = gender
if (avatar) updateData.avatar = avatar
if (Object.keys(updateData).length > 0) {
await prisma.user.update({ where: { id: user.id }, data: updateData })
} }
const token = await issueUserJwt(fastify, user.id, user.email) const token = await issueUserJwt(fastify, user.id, user.email)