如何以编程方式登录Facebook oauth2 api

Pat*_*phy 4 oauth node.js facebook-graph-api

背景:

我编写了一个Node.JS脚本,通过我的facebook应用程序成功连接到Facebook Graph API.当我给它一个oauth时access_token,我可以读取数据,我希望这个脚本每晚都在我的服务器上运行以存储一些数据.我已经对facebook api,oauth和类似的堆栈溢出问题进行了大量研究.我正在搜索/search/?type=event&q=query端点

问题:

然而,Facebook access_token通过oauth2登录过程返回60天,这需要我创建一个express服务器,只需启动oauth2进程,允许用户登录,并接收access_token代码,我将其存储.

我希望脚本保存数据,以便我的服务器可以每天提供对更新数据的访问.我不想记得每60天登录一次生成密钥.

题:

无论如何在access_token没有设置httpexpress服务器的情况下接收oauth2 ?更重要的是,如何access_token每隔60天就不必手动运行该服务器.

码:

我正在使用的模块需要access_tokenclient_secret

fs.readFile('./facebookAuthServer/oauth.txt', function read(err, data) {
    if (err) {
        throw err;
    }
    fbNode.setAuthorization({token: data, clientSecret: authSettings.clientSecret});
    // Use the auth for next call
    fbNode.fetchItems(displayItems);
});
Run Code Online (Sandbox Code Playgroud)

有没有办法欺骗标题?或者我可以使用短期访问令牌并刷新它吗?无论如何刷新60天令牌?有没有人创建了Oauth2的服务器端实现,不需要第一次访问FB登录?

sim*_*imo 5

以下是使用Grantrequest刷新自己的访问令牌的方法.

首先,您需要启动并运行OAuth客户端服务器:

var express = require('express')
var session = require('express-session')
var Grant = require('grant-express')

var grant = new Grant({
    server:{host:'dummy.com:3000', protocol:'http'},
    facebook:{
      key:'[APP_ID]',
      secret:'[APP_SECRET]',
      scope:['user_about_me','user_birthday'],
      callback:'/callback'
    }
  })

var app = express()
app.use(session({secret:'very secret'}))
app.use(grant)

app.get('/callback', function (req, res) {
  res.end(JSON.stringify(req.query))
})

app.listen(3000, function () {
  console.log('Oh Hi', 3000)
})
Run Code Online (Sandbox Code Playgroud)

接下来,您需要一个模拟浏览器请求的HTTP客户端:

var request = require('request')

request.get({
  uri:'http://dummy.com:3000/connect/facebook',
  headers:{
    'user-agent':'Mozilla/5.0 ...',
    cookie:'datr=...; lu=...; p=-2; c_user=...; fr=...; xs=...; ...'
  },
  jar:request.jar(),
  json:true
}, function (err, res, body) {
  if (err) console.log(err)
  console.log(body)
})
Run Code Online (Sandbox Code Playgroud)

你如何使用它:

  1. 在Facebook上注册OAuth应用并设置您的站点URL(我假设http://dummy.com:3000)
  2. 添加127.0.0.1 dummy.com到您的主机文件
  3. 从上面配置并启动服务器
  4. 导航到dummy.com:3000您的浏览器
  5. 打开开发人员工具并导航到"网络"选项卡,确保Preserve log选中
  6. http://dummy.com:3000/connect/facebook像往常一样导航并进行身份验证
  7. 查看"网络"选项卡中的授权请求,并将相关标头复制到HTTP客户端示例(user-agentcookie)
  8. 运行HTTP客户端代码(这是您将要不时执行的代码,服务器也应该运行)

资源:

模块:

我将上面的代码包装到模块https://github.com/simov/facebook-refresh-token中


Tob*_*obi 0

从阅读文档开始,那里都有描述,而不是猜测:

某种程度上遗憾的是,您没有编写您想要通过 Graph API 查询的内容,因为根据您的情况,您可以使用未过期的页面访问令牌或应用程序访问令牌,这些令牌也不必更新,而不是用户访问令牌。

无法自动延长长期访问令牌。用户必须再次访问您的应用程序。