NextJS Auth with express - 刷新令牌

时间:2021-03-27 16:04:55

标签: express authentication jwt next.js

我目前正在制作我的第一个 Next.js 应用程序,但我遇到了身份验证问题。我正在为我的 API 使用 expressjs,并且我的登录路由将刷新令牌设置为 cookie 并返回一个访问令牌。

登录:

res.cookie(
  'zis',
  sign(payload, REFRESH_TOKEN_SECRET, {
    expiresIn: '24h',
  }),
  {
    expires: new Date(Date.now() + 24 * 3600000),
    httpOnly: true,
    secure: process.env.NODE_ENV !== 'development',
    sameSite: 'strict',
  }
);

res.json({
  accessToken: sign(payload, ACCESS_TOKEN_SECRET, {
    expiresIn: '15m',
  }),
});

我有另一个路由 /resfresh-token 用于获取新的访问令牌。我的所有其他路由都通过验证访问令牌的中间件 isAuth 进行保护。

到目前为止,我可以从我的下一个 js 页面 signin.js 设置和获取 cookie,并且还通过上下文我使用 getServerSideProps() 将 cookie 传递给其他受保护的页面以获得新的访问权限令牌并验证它。

下一个JS页面:

export async function getServerSideProps(context) {
  const cookie = context.req.headers.cookie;
   
  const resRefreshToken = await fetch(
    `http://localhost:5000/auth/refresh-token`,
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        cookie: cookie,
      },
    }
  );

  const refreshToken = await resRefreshToken.json();

  var bearer = 'bearer ' + refreshToken.accessToken;

  const res2 = await fetch(`http://localhost:5000/api/users`, {
    headers: {
      authorization: bearer,
    },
  });
  
  const users = await res2.json();

  return {
    props: { users },
  };
}

我的问题首先是,我的方法或逻辑是否错误,有没有办法在每个请求上调用 /refresh-token 而不是在每个页面上重复相同的逻辑。我已经在 getInitialProps 中尝试过 _app.js 但我必须将返回的访问令牌作为 prop 传递并在 DOM 中公开它,我不确定它是否安全。 注意:此应用是一个仪表板,仅供 2 个用户使用。

谢谢

0 个答案:

没有答案