通过会话(React + Express)在不同应用程序之间进行身份验证?

Authentication between different applications through sessions (React + Express)?

我正在开发一个 React + Express 网站,我对如何实现登录功能有疑问,因为它依赖于另一个应用程序。让我解释一下:

我设法从网站后端的系统中获取了发布的数据,但现在我不确定如何pass/get将这些数据传送到前端。我正在考虑这样做:

我是后端主题的新手,所以虽然我认为这种方法可行,但我不确定这是否是一个好方法。

感谢任何可以提供反馈和想法的人,如有必要,我愿意提供更多信息。

在创建用户后端时,您可以创建一个 auth 路由器,负责让用户登录和创建用户。

authRouter.post('/signup', async (req, res, next) => {
  const { username, email, password: plainTextPassword } = req.body;

然后在创建 login/signup 时,您将创建一个 token,它将所有用户信息存储在字母和数字的组合中。这是由名为 jsonwebtoken 的包创建的。示例如下:

const newUser = await User.create(user)

token = jwt.sign(
  {
     _id: newUser._id,
     username: newUser.username,
     email: newUser.email,
     type: 'user',
  },
  process.env.SECRET,
  { expiresIn: '24h' }
);
return res.status(201).send({ token, newUser })

注意我没有发送他们的密码。

然后当您收到回复时,我假设您使用的是 axios,您可以在 localStorage 中设置令牌。

const storeUser = ({ userObj: user, token }) => {
    localStorage.setItem('user', JSON.stringify(user));
    localStorage.setItem('token', token);
};

const login = (credentials) => {
   axios
      .post('/auth/login', credentials)
      .then((response) => {
        storeUser(response.data);
      }.catch (error) { console.error(error) }
}

这就是它的基础知识。查看 jsonwebtoken,如果您正在寻找额外的安全性 bcrypt 来保护密码。

根据您的描述,您应该能够通过一个额外的步骤完成上述所有操作,查看 socket.io 应该可以让您开始实施我刚才描述的内容,但是有两个应用程序,它们只需要能够沟通。只需创建令牌,然后将其发送到您的第二个应用程序。 Socket.io 是您的解决方案。

从尝试应用@Dylan 的建议开始,我一直在搜索并了解到我是从错误的角度看问题。我在考虑我的前端和后端是两个独立的东西。

我的后端运行宁在端口 5000 上,前端在端口 3000 上,所以每当我尝试将一些授权 header 或 cookie 从我的后端传递到我的前端时,它们都会被擦除,因为域正在更改。

socket.io 方法也不起作用,因为我没有在不同的地方同时打开“应用程序 1”和“应用程序 3”(我确定可能有socket.io 的方法,但我没有设法做到)。

所以,一旦我了解了 HTTP 请求的那些基本概念,我做的第一件事就是 运行 网站的前端和后端都在同一个端口(我将在这里分享教程一旦我找到它)。有了这个,我就可以从后到前传递令牌和 cookie,反之亦然。

最终我在 Next.js 重建了我的网站并使用 cookies 来保持登录!