下一个认证 |当用户对象有太多项目时,会话请求没有数据

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 中只保存最重要的数据。

你可以在回调函数中做到这一点。

【讨论】:

以上是关于下一个认证 |当用户对象有太多项目时,会话请求没有数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用现场搜索处理机器人并使用太多请求溢出SQL?

这是不是有太多依赖项无法通过构造函数注入到对象中?

在 git svn clone/fetch 期间避免“警告:有太多无法访问的松散对象”

当某人有太多角色无法嵌入嵌入时,如何发送“无法显示的角色太多”消息?

tomcat-session 共享

ORA-29270:从pl / sql过程调用webservice时,有太多打开的HTTP请求