Sails.js: получение параметра URL после перенаправления

Я пытаюсь внедрить CAS в свою систему входа в систему, но я застрял в том, как получить «билет». По сути, билет возвращается в URL-адресе в качестве параметра, но я не могу понять, как его разобрать.

Вот мой код попытки:

login: function(req, res) {
  if (req.session.authenticated) {
    res.redirect('/dashboard');
  } else {
    var https = require('https');
    var url = require('url');

    var cas_url = 'https://auth-test.test.edu';
    var login_service = '/cas/login';
    var validation_service = '/cas/validate';
    var service = 'https://localhost:1337';

    res.redirect(cas_url + login_service + '?service=' + service);
    console.log(req.headers);
  }
}

После перенаправления на указанный мной URL-адрес сервер CAS перенаправляет обратно (с образцом билета): https://localhost:1337/?ticket=ST-10247-Qn0BuiSHob1dxcjODDku-cas-t1

Любые идеи о том, как оптимизировать мой код или как-то получить билет? Спасибо!

РЕДАКТИРОВАТЬ: для проверки сейчас см. комментарий ниже к выбранному ответу:

index: function(req, res) {
  var ticket = req.param('ticket');

  if (req.session.authenticated) {
    res.redirect('/dashboard');
  } else if (ticket) {
    var https = require('https');
    var options = {
      cas_url: 'https://auth-test.berkeley.edu',
      login: '/cas/login',
      validate: '/cas/validate',
      service: 'http://localhost:1337'
    };
    // redirect to validate URL
    res.redirect(options.cas_url + options.validate 
      + '?service=' + options.service + '&ticket=' + ticket);
  } else {
    res.view({
      title: 'Home'
    });
  }
}

Если валидация проходит, в теле будет две строки: yes username

Если проверка не проходит, в HTML будет отображаться только одна строка: no

Как разобрать каждую строку отображаемой HTML-страницы?


person kk415kk    schedule 25.03.2014    source источник


Ответы (1)


Вам нужно создать индексный маршрут, указать его на действие контроллера и получить токен в этом действии. Например, в /config/routes.js добавьте:

'/': 'HomeController.index'

затем в /api/controllers/HomeController:

index: function (req, res) {

   // req.param will contain any route params, body params or
   // query string params
   var ticket = req.param('ticket');

   return res.send("The ticket is: " + ticket);

}

Затем https://localhost:1337/ укажет на этот код, если на вашем сервере правильно настроен SSL!

person sgress454    schedule 25.03.2014
comment
Спасибо! Если мне нужно проверить билет, я должен снова перенаправить его на URL-адрес проверки, который просто отображает да или нет на пустой HTML-странице. Как мне проанализировать HTML-страницу, чтобы получить ответ «да» или «нет»? Отредактировано выше, чтобы включить пример кода. - person kk415kk; 25.03.2014
comment
Извините, чтобы уточнить: если проверка проходит через тело, будет две строки: да имя пользователя Если проверка не проходит, HTML будет отображать только одну строку: нет - person kk415kk; 25.03.2014
comment
Это похоже на отдельную проблему, которую лучше было бы представить как отдельный вопрос... - person sgress454; 25.03.2014