【问题标题】:Passport Socket.io Authentication With Redirect带有重定向的 Passport Socket.io 身份验证
【发布时间】:2020-05-26 11:47:45
【问题描述】:

我正在使用 Passport.Socket.io 在 socket.io 中访问用户的登录信息,但是,我无法找到一种方法来处理每个页面的身份验证。

1) 我的目标是检查用户是否登录,如果没有,我想将他们重定向到登录页面。 我知道 Passport.Socket.io 具有处理身份验证失败的功能,但是如何在此功能中实现重定向。有没有更好的方法来处理这个?我不想在每个客户端页面中调用重定向。
2)我想知道调用护照身份验证的最佳方法是什么。我是否必须将用户重定向到服务器端口并使用 express 处理?还是有更好的方法?
注意:我的客户端代码在 Nginx 上运行并且位于单独的端口上。

io.use(
passportSocketIo.authorize({
key: "connect.sid",
secret: "secret",
store: new MySQLStore(options),
passport: passport,
cookieParser: cookieParser,
fail: onAuthorizeFail,
})
);

function onAuthorizeFail(data, message, error, accept) {
  // redirect in here? 
}

更新:
这就是我现在所拥有的。这是这样做的正确方法,还是有更好的方法? 对于第二个问题,我仍然没有找到更好的解决方案。

function onAuthorizeFail(data, message, error, accept) {
  accept(new Error("Auth Error"));
}

在客户端:

  initSocket = () => {
const socket = io(socketURL);
socket.on("connect", () => {
  console.log("Socket online");
});
socket.on("error", () => {
  window.open("http://localhost:3000/login", "_self");
});
this.setState({ socket });
};

【问题讨论】:

    标签: node.js reactjs passport.js passport.socketio


    【解决方案1】:

    我通过使用 Redux 并在 BrowserRouter 中处理重定向解决了我的问题:
    1. 实现共享状态进行身份验证。
    2. 将受保护的页面包装在处理重定向的特殊身份验证组件中。这在可用的 React-Router 文档中进行了解释here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-11
      • 1970-01-01
      • 2019-03-28
      相关资源
      最近更新 更多