我希望我的NEXTJS项目检查cookie头(仅HTTP)并验证JWT服务器端。如果用户未登录,我想用302重定向到/ login来响应。这种逻辑通常会流向何处?我曾尝试将其放在_app.js
的{{1}}中,但这似乎使最初的页面渲染器之外的事情大失所望。将逻辑转移到getInitialProps
的{{1}}似乎可以解决问题,但是我不确定这是一个好习惯吗?如果要求之一是除非经过身份验证,否则不应该给出html / js / css响应,您将放在哪里?提前致谢! :)
答案 0 :(得分:0)
我认为您可以参考此https://github.com/vercel/next.js/tree/canary/examples/with-iron-session并进行一些修改:
/api/login
和/或/api/user
中添加JWT验证/解码。 Next.js不会在客户端捆绑您的JWT解码器userUser
-https://github.com/vercel/next.js/blob/canary/examples/with-iron-session/pages/profile-sg.js)或SSR(getServerSideProps
-https://github.com/vercel/next.js/blob/canary/examples/with-iron-session/pages/profile-ssr.js)获取当前用户取决于您的需求警告:这是一个官方示例,据说正在Next.js中使用最佳做法进行身份验证。
我在几个真实的示例中遇到了一个类似的示例,客户端请求身份验证服务器并获得JWT令牌,然后将该令牌传递到Next.js req.cookie中以进行会话处理。 我不喜欢的是我们必须在Next.js的服务器端提供解密JWT的秘密。