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

如何不使用firebaseui-web实现next-firebase-auth的firebase认证回调

问题根因

你的手动请求报错本质是axios.post传参顺序错误:axios.post方法的入参顺序是请求地址、请求体数据、请求配置,你把headers配置放在了第二个参数(请求体)的位置,导致请求实际没有携带Authorization头,才触发了接口返回的缺少授权头报错。

next-firebase-auth完全支持不依赖firebaseui-web实现自定义登录流程,完整实现方案如下:

1. 修正登录函数代码

修改你的登录请求逻辑,把headers放到axios.post的第三个参数位置,登录成功后手动跳转对应firebaseui配置中signInSuccessWithAuthResult返回false的后续逻辑:

const result = await firebase.auth().signInWithPopup(provider)
const token = await result.user.getIdToken(true)
await axios.post('/api/login', {}, {
  headers: {
    Authorization: `Bearer ${token}`,
  },
})
// 登录成功后跳转目标页,可根据需求替换为用户之前访问的页面地址
window.location.href = '/'

2. 现有配置复用说明

你提供的initAuth.js配置已经正确声明了loginAPIEndpoint参数,/pages/api/login的实现也符合官方要求,不需要额外调整。

3. 服务端获取用户信息验证

后续在需要SSR的页面中,直接使用next-firebase-auth提供的包装方法即可正常获取用户信息和ID令牌,示例如下:

import { AuthAction, withAuthUser, withAuthUserTokenSSR } from 'next-firebase-auth'

const SSRPage = ({ userData }) => {
  return <div>用户邮箱:{userData.email}</div>
}

export const getServerSideProps = withAuthUserTokenSSR({
  whenUnauthed: AuthAction.REDIRECT_TO_LOGIN,
})(async ({ AuthUser }) => {
  // 可以正常调用getIdToken获取最新令牌
  const idToken = await AuthUser.getIdToken()
  return {
    props: {
      userData: {
        id: AuthUser.id,
        email: AuthUser.email,
      }
    }
  }
})

export default withAuthUser()(SSRPage)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:06:01