You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Strapi中启用用户会话?针对/auth/local接口的配置咨询

我在几个Strapi v4项目里折腾过会话管理,刚好能给你分享下最实用的配置步骤和踩过的坑:

1. 先理清Strapi的会话基础

Strapi确实默认依赖koa-session,但默认配置里没有开启前端可接收的会话Cookie——毕竟它默认优先用JWT做身份验证。要启用会话,得从中间件和用户权限插件两个地方入手。

2. 配置全局会话中间件

首先找到项目根目录下的config/middlewares.js(旧版本可能是config/middleware.js),把strapi::session中间件的配置补全:

module.exports = [
  'strapi::errors',
  {
    name: 'strapi::session',
    config: {
      // 必须设置加密密钥,生产环境一定要存在环境变量里,别硬编码
      secret: process.env.SESSION_SECRET || 'your-super-random-32-char-secret',
      cookie: {
        path: '/', // Cookie生效的路径,全局就设为/
        httpOnly: true, // 禁止前端JS读取Cookie,更安全
        // 生产环境必须开secure,配合HTTPS使用,不然浏览器可能拒绝保存Cookie
        secure: process.env.NODE_ENV === 'production',
        maxAge: 24 * 60 * 60 * 1000, // 会话有效期1天,按需调整
        sameSite: 'lax', // 跨域场景可设为'none'(但要配合secure),同源用'lax'足够
      },
    },
  },
  'strapi::cors',
  'strapi::poweredBy',
  'strapi::logger',
  'strapi::query',
  'strapi::body',
  'strapi::favicon',
  'strapi::public',
];
3. 让用户权限插件支持会话登录

因为你用的是/auth/local这个默认登录接口,属于users-permissions插件,得让它在登录成功时设置会话Cookie。修改config/plugins.js:

module.exports = {
  // 其他插件配置...
  'users-permissions': {
    config: {
      // 如果你只想用会话,不想用JWT,可以把jwt.enabled设为false
      // 要是想同时支持JWT和会话,保持true就行,两者不冲突
      jwt: {
        enabled: true,
      },
      session: {
        enabled: true, // 关键:开启会话支持
        // 这里可以单独配置会话Cookie的参数,不写就继承全局会话的配置
      },
    },
  },
};
4. 验证会话是否生效

配置完重启Strapi,然后用Postman或者curl测试:

  • 发送POST请求到/auth/local,带上identifier和password
  • 看响应头里有没有Set-Cookie字段,里面应该包含strapi_session(默认名称)的Cookie
  • 接下来发送GET请求到/users/me,不用带Authorization头,只需要带上刚才的Cookie,应该能返回当前用户的信息,说明会话生效了
5. 生产环境必看的坑
  • 会话存储:默认是内存存储,重启Strapi后所有会话都会丢失!生产环境一定要换成Redis或者数据库存储。比如用Redis的话,先安装koa-redis,然后在会话配置里加store:
    const RedisStore = require('koa-redis');
    
    module.exports = [
      {
        name: 'strapi::session',
        config: {
          secret: process.env.SESSION_SECRET,
          store: new RedisStore({
            host: process.env.REDIS_HOST,
            port: process.env.REDIS_PORT,
            password: process.env.REDIS_PASSWORD,
          }),
          cookie: { /* ... */ },
        },
      },
      // ...其他中间件
    ];
    
  • 跨域场景:如果你的前端和Strapi不在同一个域名,要配置CORS允许携带Cookie。在strapi::cors的配置里加credentials: true,同时前端请求要设置withCredentials: true(比如Axios里要加这个选项)。
  • Secret安全:绝对不能把SESSION_SECRET硬编码到代码里,一定要用环境变量(比如.env文件),而且密钥要足够长(至少32位随机字符串)。

内容的提问来源于stack exchange,提问作者Rishi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:51:35