带有重定向的Passport Socket.io身份验证

时间:2020-05-25 04:22:49

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

我正在使用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 });
};

1 个答案:

答案 0 :(得分:1)

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

中的React-Router文档对此进行了解释。