У нас есть проект, созданный с помощью React, Next.js и бэкенда Laravel.
Мы используем четыре поставщика аутентификации: CredentialsProvider, YandexProvider, VkProvider и MailRuProvider.
Считается ли хорошей практикой делать запрос к бэкенду Laravel в обратном вызове session для получения данных профиля пользователя?
Мы заметили, что есть частые запросы к /session, и каждый обратный вызов, похоже, запускает дополнительные запросы.
next-auth = ^5.0.0-beta.29
Вот фрагмент кода, показывающий HTTP-запросы:
export const { handlers, signIn, signOut, auth } = NextAuth({
trustHost: true,
providers: [
YandexProvider({/* code */}),
VkProvider({/* code */}),
],
callbacks: {
async jwt({ token, user, account, profile, trigger, session }) {
if (account?.provider === 'yandex') {
const email = profile.emails[0]
const data = await check({ email: email })
if (!data.data.user_exist) {
const user = {
// ... fill props
}
const data = await register(user)
if (data) {
const { user, token: access_token, refresh_token } = data.data
token.user = {
// ... fill props
}
// save token for get profile
token.token = access_token
token.refreshToken = refresh_token
}
} else {
const user = {
// ... fill props
}
const data = await login(user)
if (data) {
const { user, token: access_token, refresh_token } = data.data
token.user = {
// ... fill props
}
// save token for get profile
token.token = access_token
token.refreshToken = refresh_token
}
}
}
return token
},
async session({ session, token, user }) {
const access_token = token.token
const refresh_token = token.refreshToken
if (token) {
const response = await fetch(
`${process.env.NEXT_PUBLIC_API_URL}/profile`,
{
method: 'GET',
headers: {
Authorization: 'Bearer ' + access_token,
'Content-Type': 'application/json'
}
}
)
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText)
}
session.user = {
// ... code
// access_token from jwt callback
accessToken: access_token,
refreshToken: refresh_token
}
}
return session
}
},
})