js:在重定向后检索URL参数

Sails.js: Retrieving URL parameter after redirect

本文关键字:检索 URL 参数 重定向 js      更新时间:2023-09-26

我正试图将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'
    });
  }
}

如果验证通过,正文将有两行:yesusername

如果验证没有通过,HTML将只显示一行:no

如何解析显示的HTML页面的每一行?

您需要创建索引路由,将其指向控制器操作,并在该操作中检索令牌。例如,在/config/routes.js中,添加:

'/': 'HomeController.index'

then in /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 !