我有一个 Joomla 网站。我编写了一个组件,允许用户使用基于 REST 的服务调用登录。例如:
http://abc.com/rest/login/greg/greg
在浏览器上执行此操作时,将使用 JAuthentication 检查凭据,并且用户登录如下:
$mainframe =& JFactory::getApplication('site');
$usersipass['username'] = $name;
$usersipass['password'] = $password;
$mainframe->login($usersipass);
但是,如果我在执行 URL 的同一浏览器中签入,这一切都有效。要允许从外部代理(如命令行)发生这种情况是行不通的:
curl -v http://abc.com/rest/login/greg/greg
显然,这与在相关浏览器中设置正确的 cookie 有关。我尝试使用允许用户使用外部 php curl 脚本登录的这个stackoverflow 问题。关于 cookie 的部分是这样的:
// Get logged in cookie and pass it to the browser
preg_match('/^Set-Cookie: (.*?);/m', $ret, $m);
$cookie=explode('=',$m[1]);
setcookie($cookie[0], $cookie[1]);
但是,这不会在同一浏览器中登录用户。身份验证适用于所有情况。我的最终目标是从像 Meteor 这样的 javascript 框架调用 REST API,并让用户在同一个浏览器中登录。