2013-12-21 71 views
0

我想让一个脚本以Joomla面板中的管理员身份自动登录。我使用snoopy进行发布查询,并且它的工作正常,但Joomla的响应是安全令牌是错误的。我使用JSession::getFormToken()来获取令牌,当我回显它时输出一个令牌(但可能不是正确的?)。joomla管理员通过php登录脚本错误的令牌

为什么我需要那个? 我只想制作一个脚本,授予我管理员权限到我的网站(该脚本将受密码保护)并自动创建文章,但问题是Joomla中的安全令牌(当前使用版本3.0),这是管理员登录所需的也用于发布文章。有没有更简单的方法来实现我的想法?

这里是我使用的脚本(BTW剧本的一篇文章中,我使用directPHP绑定在文章PHP):

<?php include "Snoopy.class.php"; 
$snoopy = new Snoopy; 
$x=JSession::getFormToken(); 
$submit_url = "http://domain.com/administrator/index.php"; 
$submit_vars["username"] = "admin"; 
$submit_vars["passwd"] = "mypassword"; 
$submit_vars["option"] = "com_login"; 
$submit_vars["task"] = "login"; 
$submit_vars["return"] = "aW3kDXgucMhw"; 
$submit_vars[$x] = "1"; 
if($snoopy->submit($submit_url,$submit_vars)) 
{ 
    while(list($key,$val) = each($snoopy->headers)) 
     echo $key.": ".$val."<br>\n"; 
    echo "<p>\n"; 

    echo "<PRE>".htmlspecialchars($snoopy->results)."</PRE>\n"; 
} 
else 
    echo "error fetching document: ".$snoopy->error."\n"; ?> 

输出如下:

0: HTTP/1.1 200 OK 
1: Date: Sat, 21 Dec 2013 15:02:53 GMT 
2: Server: Apache 
3: X-Powered-By: PHP/5.3.28 
4: Connection: close 
5: Content-Type: text/html 

Die Anfrage wurdezurückgewiesen,da der Sicherheitstokenungültigist。 Aktualisieren Sie die Seite und versuchen Sie es erneut。 (意味着查询被拒绝,因为安全令牌错误)

那么,如何获得“正确的”安全令牌或者是否有更简单的方法来实现我的想法。 在此先感谢。

+0

我也试过这种方法http://stackoverflow.com/questions/19564730/joomla-login-automatically-performed-by-external-php-script-which-is-called-thro?rq=1没有成功。 – user3125470

回答

1

我有类似的问题。

我正在利用jQuery从前端登录用户(当然他们已经通过身份验证)并且正在接收相同的响应。我使用$document->addScriptDeclaration()将会话令牌转换为JavaScript变量。

我认为当您在前端调用JSession::getFormToken()时会出现问题。

我写一个小插件试用了onAfterInitialize做了这样的事情:

function onAfterInitialise() 
{ 
    $request = JFactory::getApplication()->input->get->get('ajaxGet', '', 'string'); 
    $admin = JFactory::getApplication()->isAdmin(); 


    if( $request == "token" and $admin){ 
     echo json_encode(array("token" => JSession::getFormToken())); 
     exit(); 
    } 
} 

请注意,我不建议这对任何类型的生产。这只是为了测试。

所以用我的jQuery脚本,我首先调用了一个GET请求到/adminstrator.php并收到了上面的JSON。然后,我使用该令牌进行登录请求,然后登录成功。

Joomla似乎在区分前端和后端生成的令牌方面做得很好。

希望这会有所帮助!