根据文档@auth0/nextjs-auth0,我们可以使用withPageAuthRequired
来触发登录页面所需的页面登录屏幕。
短变体:export const getServerSideProps = withPageAuthRequired();
但是,如果我需要在构建时使用getStaticProps
对不能与getServerSideProps一起使用的预呈现页面,该怎么办?是否有任何方法在请求时使用withPageAuthRequired
静态生成的页面?
现在,我正在使用客户端的双重检查进行检查。但我宁愿使用服务器端检查,就像我在其他页面上使用的那样。
在客户端也有使用withPageAuthRequired
的方法。这个不适合我使用。
发布于 2021-07-16 04:42:05
由于getStaticProps()
用于构建静态页面(即,在请求时没有服务器端逻辑/呈现),因此必须在客户端进行自动检查和重定向登录。
您可以通过在静态资源前面添加一个代理(例如,使用Lambda@Edge)来获得您想要的行为,尽管我对这种方法还不太熟悉。
从您的问题看来,您似乎已经熟悉了如何在客户端进行检查/重定向,但为了将来遇到此帖子的其他人的利益:
要在客户端获取用户信息,请向应用程序中添加一个<UserProvider>
,并在客户端组件中调用useUser()
钩子。
请参阅文档
用
pages/_app.js
组件包装您的UserProvider
组件: // pages/_app.js导入响应于“function”;从“@auth0/nextjs-auth0”导入{ UserProvider };导出默认函数App({ Component,pageProps }) { import ( ); 现在,您可以通过检查是否定义了由user
钩子返回的useUser()
对象来确定用户是否经过身份验证。还可以从Next.js应用程序的前端层登录或注销用户,方法是将用户重定向到适当的自动生成路由: // pages/index.js从‘@auth0/nextjs-auth0’导入{ useUser };导出默认函数索引(){ const { user,isLoading }= useUser();if (isLoading)返回加载.;if (错误)返回{error.message};if (用户){error.message}返回(欢迎{user.name}!}返回登录;} 有关其他全面示例,请参见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>
);
});
从其他例子链接。
https://stackoverflow.com/questions/68201349
复制相似问题