node.js - 获取oauth信息后如何将数据发送回客户端

标签 node.js express oauth-2.0 httprequest wechat

逻辑流程:

1:客户端oauth认证

2:浏览器重定向回带有客户端代码的预定义 URL

3:服务端处理get方法中的代码,获取客户端的数据

我想要实现的目标:

服务器获取到oauth数据后,将数据发送回客户端,然后客户端的浏览器可以处理这些数据并进行相应的更改。

app.get('/callback', function (req, res, next) {

          client.getUser(openid, function (err, result) {
             var userInfo = result; //this is client's userInfo
           //now how can I send back the userInfo object back to the client? 
           //If I use res.send() the client's page will be nothing but just the data
           //I cannot use socket.io here
           //I am not sure If I can use ajax here because usually client does not send a request in the first place
           })

   })

有没有办法在不改变客户端页面的情况下发回数据?这似乎是一个很容易解决的问题,但我一直摸不着头脑,却什么也没想出来!

最佳答案

如果 Ajax 不是您想要的,您可以将 userInfo 作为响应参数并将其呈现在页面的 html 代码中作为 JavaScript 值。当页面在浏览器中打开时,解析此 JavaScript 值并将其存储到全局变量 (window)。

userInfo 作为响应参数:

app.get('/callback', function (req, res, next) {
      client.getUser(openid, function (err, result) {
         var userInfo = result; //this is client's userInfo, assume it is JSON.
         res.locals.userInfoString = JSON.stringify(userInfo);
       })
})

在页面的html代码中渲染它,并在页面加载时解析它(假设使用nunjucks模板,但任何其他模板技术都将支持相同的功能):

<html>
  <head>
  ...
  <script type="text/javascript">
    var userInfoString = '{{userInfoString}}';
    window.userInfo = JSON.parse(userInfoString);
  </script>
  </head>
  ...
</html>

这样,您就可以在 JavaScript 代码中访问 window.userInfo 来获取 userInfo 对象。

<小时/>

对于 Ajax 解决方案,您可以在页面加载后发送 Ajax 请求,从服务器获取 userInfo 数据。当检索到 userInfo 数据时,使用 jQuery 或原生 JavaScript 更改相关 DOM。

页面加载后发送 Ajax 请求,获取数据并更改 DOM:

<html>
  <head>
  ...
  <script type="text/javascript" src="./js/jQuery.js"></script>
  <script type="text/javascript">
    $(function() {
      $.get('/userInfo', function(data) {
        // change DOM with data.
      });
    });
  </script>
  </head>
  ...
</html>

当访问/callback时,获取userInfo并保存到数据库中,然后返回页面:

app.get('/callback', function (req, res, next) {
  client.getUser(openid, function (err, result) {
     var userInfo = result;
     // save userInfo into Database.
     res.render('callback_page');
   })
});

当访问/userInfo时,获取openid并从数据库读取userInfo数据:

app.get('/userInfo', function (req, res, next) {
  // get openid from req
  // get userInfo from database by openid
  res.json(userInfo);
});

关于node.js - 获取oauth信息后如何将数据发送回客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43892490/

相关文章:

javascript - 条件 Jade 模板,用户登录

node.js - Express router.post没有执行 block ,但发现

node.js - `RSV2 and RSV3 must be clear` 中的错误 `ws`

c# - 在 Yammer 中自动获取组 ID

php - 即使 token 存在,也没有ActiveAccessToken - OAuth2 + Laravel + Swift 的 Lumen

javascript - API删除不更新数据库

javascript - Electron 应用名称不变

node.js - 在 Node 上如果不存在如何执行插入

node.js - 努力让回调工作express.js

reactjs - 如何使用 aws cognito 联合身份处理重定向