【发布时间】:2022-01-08 17:42:02
【问题描述】:
我正在使用 nextjs 12 中的新中间件,并尝试使用 firebase 添加身份验证。
但是当我尝试使用钩子 useAuthState 时,它给了我一个错误消息:“无效的钩子调用。只能在函数组件的主体内部调用钩子。这可能由于以下原因之一发生:
- 您可能有不匹配的 React 版本和渲染器(例如 React DOM)
- 您可能违反了 Hooks 规则
- 您可能在同一个应用程序中拥有多个 React 副本 有关如何调试和修复此问题的提示,请参阅 https://reactjs.org/link/invalid-hook-call。 空”
除了在 pages 目录中创建 2 个组件之外,我没有对应用程序进行任何更改
login.js 和 _middleware.js
这是我的 _middleware.js
import { NextResponse } from "next/server";
// import firebase from "firebase"
import { initializeApp } from "firebase/app";
import "firebase/auth";
import { getAuth } from "firebase/auth";
import { useAuthState } from "react-firebase-hooks/auth";
initializeApp({ ... });
const auth = getAuth();
export async function middleware(req) {
const [user] = useAuthState(auth);
const { pathname } = req.nextUrl;
if (!user) {
return NextResponse.redirect("/login");
}
return NextResponse.next();
}
这是我的 login.js
function login() {
const signInWithGoogle = () => {
console.log("Clicked!");
};
return (
<div>
<button onClick={signInWithGoogle}>Sign in with google</button>
</div>
);
}
export default login;
这是我的 package.json
{
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start"
},
"dependencies": {
"firebase": "^9.5.0",
"next": "^12.0.4",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-firebase-hooks": "^4.0.1"
},
"devDependencies": {
"autoprefixer": "^10.2.6",
"postcss": "^8.3.5",
"tailwindcss": "^2.2.4"
}
}
【问题讨论】:
-
你在反应组件之外调用了一个钩子
useAuthState
标签: reactjs firebase react-hooks next.js