javascript - 检查身份验证服务器端并在未经身份验证时重定向
问题描述
我希望我的 NEXTJS 项目检查 cookie 标头(仅限 http)并验证 JWT 服务器端。我想以 302 重定向响应 /login 以防用户未登录。这个逻辑通常会去哪里?我尝试将它放在_app.js
'sgetInitialProps
中,但这似乎会严重破坏除了初始页面渲染之外的东西。将逻辑移至_document.js
'sgetInitialProps
似乎可以解决问题,但我不确定这是一个好习惯吗?如果要求之一是除非经过身份验证,否则不应给出 html/js/css 响应,您会将它放在哪里?提前致谢!:)
解决方案
我认为您可以参考此https://github.com/vercel/next.js/tree/canary/examples/with-iron-session并稍作修改:
/api/login
在和/或中添加 JWT 验证/解码/api/user
。Next.js 不会在客户端捆绑您的 JWT 解码器- 以 SSG 方式获取当前用户(
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 的秘密
推荐阅读
- javascript - 尝试将 tensorflow.js 导入浏览器应用程序时无法在模块外使用 import 语句
- typescript - 在 TypeScript 中为文字添加类型
- windows - Windows 帐户密码哈希位置
- python - 从数据库中获取二进制变量的自动化方法
- python - 使用多个子字符串匹配合并两个数据帧
- drupal-8 - 在评分模块 Drupal 8-9 的单独视图中计算每个喜欢/不喜欢的投票
- node.js - 相同的 websocket url 适用于 'ws' lib,但不适用于 socket-io。为什么?
- java - JNA 结构可以支持不变性吗?
- php - 如何从 instagram.com/user/?__a=1 获取 json
- python - 如何使用 pyside 正确设置 vscode?缺少建议