如何解决如何从 _app.js 服务器端全局访问 next-auth 用户会话数据?
使 next-auth
中的 user
session
数据在服务器端的所有页面中全局可访问的最佳方法是什么?
还是需要手动将 getServerSideProps
添加到每个页面才能获取 session
user
数据?
<Provider session={pageProps.session}></Provider>
在 _app.js
return
函数中,所以我需要一个 hoc
wrapper
组件吗?
我尝试使用 getInitialProps
:
function MyApp({ Component,pageProps,initialLoginStatus }) {
console.log(initialLoginStatus);
....
return (
<React.Fragment>
<Provider session={pageProps.session}>
...
</Provider>
</React.Fragment>
)
}
MyApp.getInitialProps = async ( ctx ) => {
if (typeof window === "undefined") {
return {
initialLoginStatus: `test`
}
} else {
return {
initialLoginStatus: `error`
}
}
}
但我收到此错误:TypeError: Cannot read property 'session' of undefined
<Provider session={pageProps.session}>
解决方法
如果“pages”文件夹中没有“_app.js”文件,则必须将其放入其中创建一个:
import {Provider} from 'next-auth/client'
export default function App({Component,pageProps}) {
return (
<Provider session={pageProps.session}>
<Component {...pageProps} />
</Provider>
)
}
然后在您的页面中,您必须使用它来使用会话:
import {useSession} from 'next-auth/client'
&
const [session,loading] = useSession()
您可以通过执行以下操作来获取用户名:
session.user.name
例如在您提供的代码中:
import {useSession} from 'next-auth/client'
function MyApp({ Component,pageProps,initialLoginStatus }) {
const [session,loading] = useSession()
console.log(session.user.name)
console.log(session)
console.log(initialLoginStatus);
....
return (
<React.Fragment>
<Provider session={pageProps.session}>
...
</Provider>
</React.Fragment>
)
}
MyApp.getInitialProps = async ( ctx ) => {
if (typeof window === "undefined") {
return {
initialLoginStatus: `test`
}
} else {
return {
initialLoginStatus: `error`
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。