护照 Socket.io 重定向身份验证



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

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

最新更新