无法使用jquery登录mediawiki api

时间:2014-05-25 16:31:39

标签: jquery api mediawiki

我无法使用他们的api通过jquery

登录mediawiki

我使用以下代码登录mediawiki api

http://www.mediawiki.org/wiki/Example_login_code_in_JS_(using_JQuery)

相同
<!DOCTYPE html>
<html lang="en">
<head>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script>
function wiki_auth(login, pass, ref){
$.post('http://upgrade.vaniquotes.org/w.1.22/api.php?action=login&lgname=' + login + 
        '&lgpassword=' + pass + '&format=json', 

    function(data) {
        if(data.login.result == 'NeedToken') {
            $.post('http://upgrade.vaniquotes.org/w.1.22/api.php?action=login&lgname=' + login + 
                '&lgpassword=' + pass + '&lgtoken='+ data.login.token +'&format=json', 

            function(data) {
            if(!data.error){
               if (data.login.result == "Success") { 
                    document.location.href=ref; 
               } else {
                    console.log('Result is: '+ data.login.result);
               }
            } else {
               console.log('Error: ' + data.error);
            }
        });
    } else {
        console.log('Result is not: ' + data.login.result);
    }
    if(data.error) {
        console.log('Error: ' + data.error);
    }

    var myresult = data.login.result;
});
}
</script>
<script>
$(document).ready(function(){
wiki_auth('Test', 'test123', '/w.1.22/');
});
</script>
</head>
<body>
</body>
</html>

因此,当我调试时,我可以看到第一个post请求返回令牌和'NeedToken'结果。

在我向其提供令牌ID后的第二个帖子请求之后,它再次返回相同的结果NeedToken而不是成功消息

这是我在chrome调试器控制台中可以看到的

XHR finished loading: POST "http://upgrade.vaniquotes.org/w.1.22/api.php?action=login&lgname=Test&lgpassword=test123&format=json".
XHR finished loading: POST "http://upgrade.vaniquotes.org/w.1.22/api.php?action=login&lgname=Test&lgpassword=test123&lgtoken=a037a59d881bbc48ce54951d009284ce&format=json".
Result is: NeedToken 

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

有一些问题需要解决:

首先,您正在尝试进行跨站点脚本编写。如果允许这样做,那将是一个巨大的安全漏洞。因此,网络浏览器不会让你这样做。也就是说,如果要将此脚本托管在&#34; upgrade.vaniquotes.org&#34;上,您将希望使用API​​的相对路径,而不是绝对路径。

其次,

lgname,lgpassword和lgtoken是POST参数。您正在使用post方法,但未发布任何参数。只有动作和格式是GET参数。为此,您的代码需要采用

格式
$.post('/api.php?action=login&format=json', {lgname: login, lgpassword: password}, ...