iron:路由器如何重定向到具有不同域的网址?

问题描述 投票:0回答:2

问题已通过进度进行修改

来自服务器的“结果”值是一个唯一的 url(不是我的域),我将其传回客户端(请参阅我的 Meteor.call 函数)。

如何引导用户访问此网址?。使用 iron:router

Router.go();
不起作用,因为它将 url 附加到我的域。

当用户单击按钮“getgoodreads”时调用该方法。

服务器.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;
 } 
});

客户端.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); 
          }
      });
     }
});

我收到此错误: *哎呀,看起来客户端或服务器上没有 url 的路由:

"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');
  }
});

*“结果”链接将用户带到 Goodreads 页面,用户通过登录他们的 Goodreads 帐户授予我访问其数据的权限。但是,由于我的路线中未定义此路线,因此我收到错误。之所以会出现这种情况,是因为每个 url 都是唯一的。

http-redirect meteor request iron-router
2个回答
1
投票

oauth1 是其他包使用的依赖包,具体为

accounts-twitter
。没有任何传统意义上的文档。

如果您想为atmospherejs.com 上未列出的服务创建自己的oauth 登录,您可以首先查看使用oauth-1 的其他软件包。不久前我必须这样做才能允许 bitbucket 登录我的应用程序。该包的来源在这里:https://github.com/Tarang/Meteor-Accounts-Bitbucket

还有其他一些,除了重命名 URL 和服务名称之外,大多数几乎相同:


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 模块

© www.soinside.com 2019 - 2024. All rights reserved.