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

Sails.js集成Firebase登录后无法存储用户会话数据问题

解决Sails.js + Firebase登录后Session无法保存及ERR_HTTP_HEADERS_SENT错误

我一眼就看出问题所在了——你的action标记了async,但处理Firebase登录时用了Promise的.then()/.catch()写法,没有用await等待异步操作完成。这会让Sails误以为你的action已经执行完毕,可能提前结束了请求响应流程;等Firebase的异步回调触发时再调用_res.json(),自然就会抛出ERR_HTTP_HEADERS_SENT错误,同时Session的赋值也会因为响应提前结束而没来得及持久化。

修复方案

把异步操作改成await+try/catch的写法,让整个登录流程按顺序执行,确保Session设置完成后再发送响应:

fn: async function (inputs) {
  const { res, req } = this;
  const { session } = req;

  try {
    // 等待Firebase登录操作完成,拿到用户数据
    const data = await firebase.auth().signInWithEmailAndPassword(inputs.emailAddress, inputs.password);
    console.log(data.user.uid);
    // 给Session赋值
    session.userId = data.user.uid;
    // 发送响应
    return res.json(data.user);
  } catch (error) {
    console.log('Error => ', error);
    // 返回错误响应,也可以根据需求改为跳转
    return res.status(401).json({ error: error.message });
    // return res.redirect('back');
  }
}

额外注意点

  • 在Sails.js的async action中,必须等待所有异步操作完成后再发送响应,否则Sails会在函数执行到末尾时自动结束请求,导致后续的响应操作报错。
  • Session的持久化通常是在响应发送时完成的,所以一定要保证在res.json()之前已经完成Session的赋值,这样用户数据才能正确保存到Session存储中。

内容的提问来源于stack exchange,提问作者Salah El-Shennawy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:06:38