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没有设置http或express服务器的情况下接收oauth2 ?更重要的是,如何access_token每隔60天就不必手动运行该服务器.
我正在使用的模块需要access_token和client_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登录?
以下是使用Grant和request刷新自己的访问令牌的方法.
首先,您需要启动并运行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)
http://dummy.com:3000)127.0.0.1 dummy.com到您的主机文件dummy.com:3000您的浏览器Preserve log选中http://dummy.com:3000/connect/facebook像往常一样导航并进行身份验证user-agent和cookie)我将上面的代码包装到模块https://github.com/simov/facebook-refresh-token中
从阅读文档开始,那里都有描述,而不是猜测:
某种程度上遗憾的是,您没有编写您想要通过 Graph API 查询的内容,因为根据您的情况,您可以使用未过期的页面访问令牌或应用程序访问令牌,这些令牌也不必更新,而不是用户访问令牌。
无法自动延长长期访问令牌。用户必须再次访问您的应用程序。
| 归档时间: |
|
| 查看次数: |
2105 次 |
| 最近记录: |