下一个认证 |当用户对象有太多项目时,会话请求没有数据
Posted
技术标签:
【中文标题】下一个认证 |当用户对象有太多项目时,会话请求没有数据【英文标题】:Next-Auth | When user object have too many items then session request is without data 【发布时间】:2021-09-01 18:14:29 【问题描述】:我会尽力为我解释我的问题。
我使用 Strapi 作为后端,使用 Nextjs 作为前端。
我使用 NextAuth 进行身份验证。
[...nextauth].js:
const options =
providers: [
Providers.Credentials(
name: 'Credentials',
credentials:
username: label: "Email", type: "email", placeholder: "jsmith" ,
password: label: "Password", type: "password"
,
authorize: async (credentials) =>
try
const user = await axios.post(`$process.env.NEXT_PUBLIC_API_URL/auth/local`,
identifier: credentials.username,
password: credentials.password,
);
if (user.data)
return user.data
else
return null
catch (error)
const errorMessage = error.response.data.message[0].messages[0].message
throw new Error(errorMessage)
),
],
database: process.env.NEXT_PUBLIC_DATABASE_URL,
session:
jwt: true,
,
callbacks:
jwt: async (token, user) =>
if (user)
token.jwt = user.jwt;
token.user = user.user;
return Promise.resolve(token);
,
session: async (session, token) =>
session.jwt = token.jwt;
session.user = token.user;
return Promise.resolve(session);
,
,
pages:
signIn: '/login',
error: '/login'
,
;
const Auth = (req, res) =>
NextAuth(req, res, options);
export default Auth;
当我发送带有标识符和密码的表单时,我会收到带有用户数据和 jwt 的会话响应。
一切正常,但如果用户对象分配给他的对象很少,那么就会出现问题并且会话为空。
示例: 我在 Strapi 中创建了一个简单的集合,只有两个字段 - 图像字段和所有者(与用户的关系)。每个响应都包含几行图片内容:
"photo":
"_id": "60ca03fa20bd43033a53950e",
"name": "Zrzut ekranu 2021-06-16 o 14.59.48.png",
"alternativeText": "",
"caption": "",
"hash": "Zrzut_ekranu_2021_06_16_o_14_59_48_2bc223567b",
"ext": ".png",
"mime": "image/png",
"size": 170.69,
"width": 668,
"height": 636,
"url": "/uploads/Zrzut_ekranu_2021_06_16_o_14_59_48_2bc223567b.png",
"formats":
"thumbnail":
"name": "thumbnail_Zrzut ekranu 2021-06-16 o 14.59.48.png",
"hash": "thumbnail_Zrzut_ekranu_2021_06_16_o_14_59_48_2bc223567b",
"ext": ".png",
"mime": "image/png",
"width": 164,
"height": 156,
"size": 14.92,
"path": null,
"url": "/uploads/thumbnail_Zrzut_ekranu_2021_06_16_o_14_59_48_2bc223567b.png"
,
"small":
"name": "small_Zrzut ekranu 2021-06-16 o 14.59.48.png",
"hash": "small_Zrzut_ekranu_2021_06_16_o_14_59_48_2bc223567b",
"ext": ".png",
"mime": "image/png",
"width": 500,
"height": 476,
"size": 121.79,
"path": null,
"url": "/uploads/small_Zrzut_ekranu_2021_06_16_o_14_59_48_2bc223567b.png"
,
当我添加 1 或 2 个带有图像的项目并尝试登录拥有该项目的用户时,一切都很好,我可以登录并接收完整的用户对象和 jwt 令牌。
但是当我在那里添加 3 个项目时,会话对象为空,我无法登录。我没有收到用户对象和 jwt 令牌。
With 3 items With 2 items
当我使用邮递员时,即使有 50 项响应也很好,并且包括完整的用户对象和 jwt 令牌。
我认为是因为响应太大或类似的东西,但我不知道如何处理它。
我在 MacOS 上使用本地主机(前端和后端)。
有没有人可以帮我找到解决这个问题的方法?
亲切的问候, 全科医生
【问题讨论】:
【参考方案1】:上面问题的原因是api中的response传给了很多数据,next-auth把所有的数据都存储在了JWT中,而JWT完整的存储在cookie中,cookie限制为4096字节,简单的刹车限制和响应。
最简单的整理方法是在 JWT 中只保存最重要的数据。
你可以在回调函数中做到这一点。
【讨论】:
以上是关于下一个认证 |当用户对象有太多项目时,会话请求没有数据的主要内容,如果未能解决你的问题,请参考以下文章
在 git svn clone/fetch 期间避免“警告:有太多无法访问的松散对象”