如何使用AJAX和.htaccess提示输入密码?

时间:2016-05-02 19:31:51

标签: php ajax .htaccess

我正在尝试使用AJAX + PHP + .htaccess使用密码保护上传脚本。

我的测试网站位于http://scrabble.stats.org.pl/test/gcg/。如果从下拉列表中选择一个选项,则会出现一个表格。然后,在最右边的列中,您将看到" Dodaj" ("添加")按钮。他们的改变"事件由AJAX在line #25处理(下面的最小版本):

xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        $('.upload').on('change', function(event) {
            var file_data = $(event.target).prop('files')[0];
            //console.log(file_data);
            var form_data = new FormData();                  
            form_data.append('file', file_data);
            $.ajax({

                url: 'upload.php', // point to server-side PHP script 
                dataType: 'text',  // what to expect back from the PHP script, if anything
                cache: false,
                contentType: false,
                processData: false,
                data: form_data,
                type: 'post',
                success: function(php_script_response){
                    var response = $.parseJSON(php_script_response);
                    if ( response.status == 'error') {
                        alert( response.errormsg );
                    }
                    else {
                        $(event.target).closest('.fileUpload').hide();
                    }
                }
            });
        });
    }
};
可以找到{p> upload.php here。它只是将上传文件的内容保存到数据库中。它会返回$response_arraysuccesserror个州。

现在,我知道如何使用.htaccess文件保护我服务器上的文件夹并且工作正常(请查看http://scrabble.stats.org.pl/test/gcg/upl):

AuthType Basic
AuthUserFile "/usr/auth.passwd"
require valid-user
AuthName "Protected site"

是否可以仅保护upload.php,以便当用户点击该网站时,网站会提示输入密码"添加"按钮吗

我找到thisthisthis并尝试了这些解决方案,但它们似乎无法正常工作。通常我在Chrome控制台中收到此错误:

http://scrabble.stats.org.pl/test/gcg/upload/upload.php
Failed to load resource: the server responded with a status of 405 (Not
Allowed)

恐怕我可能不理解上述解决方案。首先,我不确定btoa(username + ":" + password)部分。那些特殊的关键词还是我应该公开用户:传递那些方法?

1 个答案:

答案 0 :(得分:0)

你的第一个链接似乎做对了。

点击添加按钮时,您需要自己显示弹出窗口或表单,请求上传用户名和密码.php

然后,您可以将这些数据提交到服务器,如this post中所示。

btoa方法将您的数据编码为base64。

基本上您只需发送Basic-Auth标题("授权",...),并提供用户名和密码作为数据。

  

恐怕我可能不理解上述解决方案。首先,我不确定btoa(用户名+":" +密码)部分。那些特殊的关键词还是我应该公开用户:传递那些方法?

当您登录服务器时,您始终必须发送用户名和密码。在btoa(username + ":" + password) usernamepassword中是您必须设置的变量(通过从上述登录表单中读取数据)。