我为这个貌似简单的问题困扰了好几天还是不得其解。 我用node js 搭建了一个纸牌游戏单页面网上应用。 在游戏主页(单页面)里有两个input form(用于填写用户名,密码) 和“登录”,“注册”两个按钮。 用户名在input form 上输入用户名密码后,如果点击登录,attach 在“登录”按钮的eventlistener就会emit用户名跟密码给服务器。 $("#signInButton").on(‘click’,function(){ socke.emit(“signIn”,{name:$("#userForm").val(),password:$("#passwordForm").val()}) }) 然后服务器验证之后,在room object 加入client, id 为socket id,然后emit一个event返回给client: room.addPlayer(socket.id) socket.emit(‘singInResponse’,{name:data.name,username:data.password,success:true}) client接受到后隐藏登录的elements(两个form和按钮)然后显示欢迎信息: socket.on(‘singInResponse’,function(data){ if (data.success){ //隐藏elements,显示welcome信息 } })
但是现在想加入微信验证oauth功能,当用户点击“微信登录”图标后,浏览器跳转到二维码验证页面,用户扫描确认后,浏览器跳转回/callback页面。
server.get('/callback', function (req, res) {
if (req.query.code){
client.getAccessToken(req.query.code, function (err, result){
var accessToken = result.data.access_token;
client.getUser(result.data.openid, function (err, result1) {
var oauth_user = result1;
//这里要怎么才能把 oauth_user 发送给确认微信登录的用户?
});
});
} else {
res.redirect('/');
}
});
拿到userinfo后就没辙了,我这里想用数据库直接注册userinfo,然后把userinfo的信息返回给用户,我想在用户浏览器显示他的微信昵称跟头像(要怎么发送呢?没有socket id ,res.write()吗)。还需要在room object 加入用户(加入用户需要用到socket id,我能把app.get放到sockets.connection 底下吗。 我可以设置让用户点击微信登录图标的时候发送一个event给服务器告诉服务器socket id, 但是浏览器回调的时候这个socket id 就刷新了,而且如果有几个用户先后点击微信登录的时候,很难判断哪个unserinfo是哪个socket id。 还是这个单页面系统就不能使用微信登录呢?