问题已通过进展修改
'结果'来自服务器的值是我传递回客户端的唯一URL(不是我的域)(参见我的Meteor.call函数)。
如何将用户定向到此网址?。使用iron:路由器Router.go();
不起作用,因为它将url附加到我的域。
当用户点击按钮“getgoodreads”时,系统会调用该方法。'
Server.js
var request = Npm.require('request');
var querystring = Npm.require('querystring');
Meteor.methods({
getGoodreads: function () {
request.post('http://www.goodreads.com/oauth/request_token', {
oauth: {
consumer_key: 'someKey',
consumer_secret: 'someSecretKey'
}
}, function (err, res, body) {
req_data = querystring.parse(body);
result= 'http://www.goodreads.com/oauth/authorize?' + querystring.stringify({oauth_token: req_data.oauth_token});
});
return result;
}
});
client.js
Template.profiles.events({
'click #goodreads': function (event) {
event.preventDefault();
Meteor.call('getGoodreads', function (error, result) {
if (error) {
console.log(error)
} else {
console.log(result);
Router.go(result);
}
});
}
});
我收到此错误:
*糟糕,看起来客户端或服务器上没有路由的网址:"http://localhost:3000/oauth/authorize?oauth_token=IBR4tGXdAgQbEsqmxve5Q."
要重定向到的正确网址是:http://www.goodreads.com/oauth/authorize?oauth_token=IWDH8EWUhn1jtrjsQA
*
LIB
Router.route('/profile/', {
name: 'profile',
waitOn: function () {
return Meteor.subscribe('profile');
},
action: function () {
***maybe make the post function here?***
// this.ready() is true if all items returned from waitOn are ready
if (this.ready())
this.render('profile');
else
this.render('Loading');
}
});
*'结果' link将用户带到goodreads页面,用户通过登录他们的goodreads帐户授予我访问其数据的权限。但是,由于此路由未在我的路由中定义,因此出现错误。情况就是这样,因为每个网址都是唯一的。
答案 0 :(得分:1)
oauth1 one是其他包使用的依赖包,特别是accounts-twitter
。传统意义上没有任何文档可供使用。
如果您想为自己未在atmospherejs.com上列出的服务进行自己的oauth登录,可以先查看使用oauth-1的其他软件包。我不得不这样做,以允许bitbucket登录我的应用程序前一段时间。该软件包的来源是:https://github.com/Tarang/Meteor-Accounts-Bitbucket
还有其他几个,除了重命名URL和服务名称之外,大多数几乎相同:
答案 1 :(得分:0)
所以,我发现你可以使用webapp流星包来做到这一点。
在您的服务器代码中:
var fakeSession = {}
url = Meteor.npmRequire('url');
WebApp.connectHandlers.use('/to-goodreads', function(req, res, next) {
gr.requestToken(function(obj) {
fakeSession.oauthToken = obj.oauthToken;
fakeSession.oauthTokenSecret = obj.oauthTokenSecret;
console.log(obj.url)
res.writeHead(302, {
'Location': obj.url
});
return res.end();
})
})
WebApp.connectHandlers.use('/callback', function(req, res, next) {
oauthToken = fakeSession.oauthToken;
oauthTokenSecret = fakeSession.oauthTokenSecret;
params = url.parse(req.url, true);
return gr.processCallback(oauthToken, oauthTokenSecret, params.query.authorize, function(callback) {
console.log('processed callback')
res.write(JSON.stringify(callback));
return res.end();
});
})
其中gr是goodreads npm模块