feat: enrich VK OAuth with firstName/lastName/gender/avatar
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user