我正在为我的应用程序使用NextJS/React框架,目前正在实现Auth 0。由于我需要处理多个路径(localhost和实际地址),我希望像这样访问window
对象。
_应用程序.tsx
function MyApp({ Component, pageProps }: AppProps) {
return (
<Auth0Provider
domain={process.env.AUTH0_DOMAIN ?? ''}
clientId={process.env.AUTH0_CLIENT_ID ?? ''}
redirectUri={getAuth0RedirectURL()}
>
<Component {...pageProps} />
</Auth0Provider>
)
}
在我的getAuth0RedirectURL
函数中,我只是尝试访问窗口对象并处理当前环境是开发环境还是生产环境。
export const getAuth0RedirectURL = (): string => {
const url = new URL(window.location.origin) // here, I got error because window is not defined
url.pathname = process.env.AUTH0_PATH
return url.toString()
}
我确实认为当前的代码不起作用(window is undefined
),因为它不处理客户端,所以还没有出现window
对象。
我不确定如何正确访问_app.tsx
中的window
对象,以便安全地访问window.location.origin
路径?
2条答案
按热度按时间5n0oy7gb1#
您说代码不起作用是对的,因为当您试图访问服务器上的
window
时,window
是一个浏览器对象,因此您得到的是undefined
。1.您可以使用
if statement
检查window
是否为undefined
。1.另一种实现方法是使用NextJS提供的动态导入。
1.或者,这也是我的建议,你可以找到Auth0团队的recommended solution,它 * 不 * 使用他们的SPA SDK,而是在服务器端进行身份验证,这是NextJS的做法。
sxpgvts32#
@Ansh的回答没错。
但是为什么不直接使用node env呢?
如果需要检查当前环境:
如果您仍想访问窗口,可以用途: