http get 拿到了用户微信登录的信息后怎么才能把信息发送回使用微信登录的客户端
发布于 8 年前 作者 frostless 3308 次浏览 来自 问答

我为这个貌似简单的问题困扰了好几天还是不得其解。 我用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。 还是这个单页面系统就不能使用微信登录呢?

4 回复

我记得是交换几次信息,然后根据一个user_id 再发一次接口请求,查找userInfo返回 JSON。 应该要用到Ajax

@nasaplayer 有没有教程参考一下,我看到的网上教程基本上都是拿到userinfo后就redirect到其他页面但是没说怎么communcate with client的貌似比如这个https://i5ting.github.io/wechat-dev-with-nodejs/wechat/oauth.html

@frostless 对官方的文档撸

@frostless 你说的那种是同步的,带着一个服务器URL(自定义的,回调地址)访问微信的授权页面,用户授权后,微信带参数调用你的回调页,回调页根据user_id发起ajax请求获取用户信息写入session,然后刷新页面。。 以前用PHP做过QQ登录,同步的直接刷新页面,异步的要更加复杂点。。

回到顶部