iron:router как перенаправить на URL с другим доменом?

Вопрос был изменен в ходе выполнения

Значение «результат» с сервера — это уникальный URL-адрес (это не мой домен), который я передаю обратно клиенту (см. мою функцию Meteor.call).

Как я могу направить пользователя на этот URL?. Использование железа: маршрутизатор 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."

Правильный URL для перенаправления: http://www.goodreads.com/oauth/authorize?oauth_token=IWDH8EWUhn1jtrjsQA

*

библиотека

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-адрес будет уникальным.


person meteorBuzz    schedule 02.02.2015    source источник


Ответы (2)


Пакет oauth1 — это пакет зависимостей, используемый другими пакетами, в частности accounts-twitter. Для него нет документов в обычном смысле.

Если вы хотите создать свой собственный вход в систему oauth для службы, не указанной на атмосфераjs.com, вы можете начать с изучения других пакетов, использующих oauth-1. Я должен был сделать это, чтобы разрешить вход в Bitbucket с моим приложением некоторое время назад. Источник этого пакета находится здесь: https://github.com/Tarang/Meteor-Accounts-Bitbucket

Есть и несколько других, большинство из которых почти такие же, за исключением переименования URL-адресов и имен служб:

person Tarang    schedule 03.02.2015
comment
Я читаю код и пытаюсь понять, как он работает. Я понимаю некоторые из кодов аутентификации, такие как передача запроса POST для получения токена, аутентификация и получение токена доступа. Однако остальное я не понимаю, так как это специфично для поставщиков услуг. Я аутентифицировал пользователей с помощью метода oauth2.0 без использования какого-либо пакета, но oauth1.0 кажется очень сложным для понимания. - person meteorBuzz; 03.02.2015
comment
@CodeCandy, для какого сервиса вы создаете? - person Tarang; 03.02.2015
comment
Поскольку я использую этот вызов API... goodreads.com/api/index#reviews. list Я должен получить идентификатор пользователя - person meteorBuzz; 04.02.2015
comment
как лучше всего направить пользователя к созданному мной uri. Я вручную поместил это в консоль браузера после копирования из журнала, и это работает. Так что я знаю, что это следующий шаг. Я использую железный роутер. Этот процесс аутентификации начинается с вызова метода - person meteorBuzz; 04.02.2015
comment
@CodeCandy Я посмотрел на это, значит, пользователь войдет в систему через goodreads, а затем вызовет вызовы API? Если это так, то нужно просто заменить URL-адреса на goodreads и переименовать их в goodread в пакете Xero или Aweber. Если вы просто выполняете вызовы API, вам не нужен пакет oauth1, а вместо этого просто подписывайте запросы с помощью модуля npm request - person Tarang; 04.02.2015
comment
Кажется, мне не нужен пакет oauth. Однако я застрял на шаге 2. Как я могу перенаправить пользователя на переменную uri, как только будет возвращено тело исходного запроса? - person meteorBuzz; 05.02.2015
comment
можно ли вернуть uri клиенту, а затем поместить его в функцию Router.go()? - person meteorBuzz; 05.02.2015

Итак, я понял, что это можно сделать с помощью пакета meteor 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.

person NotSimon    schedule 11.12.2015