由于getStaticProps()
用于构建静态页面(即,在请求时没有服务器端逻辑/呈现),因此必须在客户端进行身份验证检查和重定向到登录。
您可以通过在静态资源前面添加一个代理(例如,使用 Lambda@Edge)来获得您想要的行为,尽管我对这种方法还不是很熟悉。
从您的问题来看,您似乎已经熟悉如何在客户端进行检查/重定向,但是为了将来遇到这篇文章的其他人的利益:
要在客户端获取用户信息,请将 a 添加到您的应用程序中,然后在客户端组件中<UserProvider>
调用钩子。useUser()
请参阅文档:
pages/_app.js
用组件包装你的UserProvider
组件:
// pages/_app.js
import React from 'react';
import { UserProvider } from '@auth0/nextjs-auth0';
export default function App({ Component, pageProps }) {
return (
<UserProvider>
<Component {...pageProps} />
</UserProvider>
);
}
您现在可以通过检查
挂钩user
返回的对象是否已定义来确定用户是否已通过身份验证。useUser()
您还可以通过将用户重定向到适当的自动生成的路由来从 Next.js 应用程序的前端层登录或注销用户:
// pages/index.js
import { useUser } from '@auth0/nextjs-auth0';
export default function Index() {
const { user, error, isLoading } = useUser();
if (isLoading) return <div>Loading...</div>;
if (error) return <div>{error.message}</div>;
if (user) {
return (
<div>
Welcome {user.name}!
<a href="/api/auth/logout">Logout</a>
</div>
);
}
return <a href="/api/auth/login">Login</a>;
}
有关其他综合示例,请参阅EXAMPLES.md
文档。
withPageAuthRequired()
在客户端使用的另一种方法:
import React from 'react';
import { withPageAuthRequired } from '@auth0/nextjs-auth0';
import Layout from '../components/layout';
export default withPageAuthRequired(function Profile({ user }) {
return (
<Layout>
<h1>Profile</h1>
<h4>Profile</h4>
<pre data-testid="profile">{JSON.stringify(user, null, 2)}</pre>
</Layout>
);
});
从其他示例链接。