passportSocketIo.authorize 不调用成功或失败回调
passportSocketIo.authorize does not call success or fail callbacks
我最近在我的快速服务器上实施了 passport.js 身份验证。我也在尝试将此身份验证用于我的 socket.io 服务器。所以我正在尝试使用 passport.socketio 包来执行此操作。
我是这样使用它的:
io.use(async (socket, next) => {
console.log("pre auth")
await passportSocketIo.authorize({
cookieParser: cookieParser, // the same middleware you registrer in express
key: 'auth', // the name of the cookie where express/connect stores its session_id
secret: 'keyboard cat', // the session_secret to parse the cookie
store: tediousConfig, // we NEED to use a sessionstore. no memorystore please
success: onAuthorizeSuccess, // *optional* callback on success - read more below
fail: onAuthorizeFail, // *optional* callback on fail/error - read more below
})
console.log("post auth")
}
成功和失败回调为:
function onAuthorizeSuccess(data, accept){
console.log("Success connection to socket.io");
accept();
}
function onAuthorizeFail(data, message, error, accept){
if(error)
throw new Error(message);
console.log("failed connection to web socket", message);
}
但是,当我尝试连接时,我同时收到“pre auth”和“post auth”的控制台消息,但没有来自授权函数的消息,也没有任何错误消息。
如有任何帮助,我们将不胜感激!
namespace.use方法是一种将中间件(函数)添加到套接字的方法。所以它期待一个功能。另一方面 passportSocketIo.authorize 正在返回中间件函数,您可以查看代码 here。
所以你有 2 个选项,要么像文档中指定的那样使用它:
io.use(passportSocketIo.authorize({
cookieParser: cookieParser, // the same middleware you registrer in express
key: 'express.sid', // the name of the cookie where express/connect stores its session_id
secret: 'session_secret', // the session_secret to parse the cookie
store: sessionStore, // we NEED to use a sessionstore. no memorystore please
success: onAuthorizeSuccess, // *optional* callback on success - read more below
fail: onAuthorizeFail, // *optional* callback on fail/error - read more below
}));
或者你这样自定义它:
io.use(async (socket, next) => {
console.log("pre auth")
return passportSocketIo.authorize({
cookieParser: cookieParser, // the same middleware you registrer in express
key: 'auth', // the name of the cookie where express/connect stores its session_id
secret: 'keyboard cat', // the session_secret to parse the cookie
store: tediousConfig, // we NEED to use a sessionstore. no memorystore please
success: onAuthorizeSuccess, // *optional* callback on success - read more below
fail: onAuthorizeFail, // *optional* callback on fail/error - read more below
})(socket, next);
}
我最近在我的快速服务器上实施了 passport.js 身份验证。我也在尝试将此身份验证用于我的 socket.io 服务器。所以我正在尝试使用 passport.socketio 包来执行此操作。
我是这样使用它的:
io.use(async (socket, next) => {
console.log("pre auth")
await passportSocketIo.authorize({
cookieParser: cookieParser, // the same middleware you registrer in express
key: 'auth', // the name of the cookie where express/connect stores its session_id
secret: 'keyboard cat', // the session_secret to parse the cookie
store: tediousConfig, // we NEED to use a sessionstore. no memorystore please
success: onAuthorizeSuccess, // *optional* callback on success - read more below
fail: onAuthorizeFail, // *optional* callback on fail/error - read more below
})
console.log("post auth")
}
成功和失败回调为:
function onAuthorizeSuccess(data, accept){
console.log("Success connection to socket.io");
accept();
}
function onAuthorizeFail(data, message, error, accept){
if(error)
throw new Error(message);
console.log("failed connection to web socket", message);
}
但是,当我尝试连接时,我同时收到“pre auth”和“post auth”的控制台消息,但没有来自授权函数的消息,也没有任何错误消息。
如有任何帮助,我们将不胜感激!
namespace.use方法是一种将中间件(函数)添加到套接字的方法。所以它期待一个功能。另一方面 passportSocketIo.authorize 正在返回中间件函数,您可以查看代码 here。 所以你有 2 个选项,要么像文档中指定的那样使用它:
io.use(passportSocketIo.authorize({
cookieParser: cookieParser, // the same middleware you registrer in express
key: 'express.sid', // the name of the cookie where express/connect stores its session_id
secret: 'session_secret', // the session_secret to parse the cookie
store: sessionStore, // we NEED to use a sessionstore. no memorystore please
success: onAuthorizeSuccess, // *optional* callback on success - read more below
fail: onAuthorizeFail, // *optional* callback on fail/error - read more below
}));
或者你这样自定义它:
io.use(async (socket, next) => {
console.log("pre auth")
return passportSocketIo.authorize({
cookieParser: cookieParser, // the same middleware you registrer in express
key: 'auth', // the name of the cookie where express/connect stores its session_id
secret: 'keyboard cat', // the session_secret to parse the cookie
store: tediousConfig, // we NEED to use a sessionstore. no memorystore please
success: onAuthorizeSuccess, // *optional* callback on success - read more below
fail: onAuthorizeFail, // *optional* callback on fail/error - read more below
})(socket, next);
}