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

Next.js 13项目Firebase用户认证:页面权限控制的判断问题

问题分析与解决办法

你的问题出在AuthContext传递的值结构不匹配:

在AuthContextProvider里,你把Context的value设成了一个对象{ user },所以当你在页面调用useAuthContext()时,拿到的不是直接的用户状态,而是一个包含user属性的对象(比如{user: null})。这就是为什么user === null返回false——你拿整个对象和null比,当然不相等。

解决办法有两种:

办法1:在页面里解构获取用户状态

修改页面里的代码,从Context返回的对象中解构出user:

export default function MyPage() {
  // 解构出实际的user值
  const { user } = useAuthContext()
  const router = useRouter()
  
  React.useEffect(() => {
        if (user === null) router.push("/login")
    }, [user])
  
  // ... 页面其他代码
}

办法2:修改AuthContext的传递值

如果你希望useAuthContext()直接返回用户状态,可以修改AuthContextProvider里的value:

// 在AuthContextProvider的return部分,把value从{ user }改成user
return (
    <AuthContext.Provider value={user}>
        {loading ? <div>Loading...</div> : children}
    </AuthContext.Provider>
);

同时,初始化Context时建议指定类型(可选,但更规范):

// 替换原来的createContext({})
export const AuthContext = React.createContext<firebase.User | null>(null);

这样页面里原来的判断逻辑if (user == null)就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:05:18