nextjs路由中间件进行身份验证

时间:2018-07-19 15:14:31

标签: javascript reactjs next.js

我正在尝试找出一种合适的身份验证方法,我知道这是GitHub issue page上的一个敏感话题。

我的身份验证很简单。我将JWT令牌存储在会话中。我将其发送到其他服务器以供批准。如果返回true,则继续进行;如果返回false,则清除会话并将其发送到主页。

在我的server.js文件中,我有以下内容(注意-我使用的是nextjs learn中的示例,仅添加了isAuthenticated):

function isAuthenticated(req, res, next) {
  //checks go here

  //if (req.user.authenticated)
   // return next();

  // IF A USER ISN'T LOGGED IN, THEN REDIRECT THEM SOMEWHERE
  res.redirect('/');
}

server.get('/p/:id', isAuthenticated, (req, res) => {
  const actualPage = '/post'
  const queryParams = { id: req.params.id }
  app.render(req, res, actualPage, queryParams)
})

这按设计工作。如果刷新页面/p/123,它将重定向到/。但是,如果我通过next/link href转到那里,则不会。我相信是因为此时它没有使用express,而是next的自定义路由。

有没有一种方法可以对每笔未通过Express的next/link进行检查,以确保用户已登录?

2 个答案:

答案 0 :(得分:8)

下一次聊天中的提姆帮助我解决了这个问题。可以找到解决方法here,但我会引用他的名字,以便大家看到:

我还创建了一个example skeleton template,您可以看看。

答案 1 :(得分:2)

middleware 中没有 API 路由没有 NextJS,但是有 HOC,您可以使用它连接到数据库 - 选择用户等: https://hoangvvo.com/blog/nextjs-middleware