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


How to prompt for password using AJAX and .htaccess?

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

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

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();
                    }
                }
            });
        });
    }
};

upload.php可以在这里找到。它只是将上传文件的内容保存到数据库中。它返回一个具有successerror状态的$response_array

现在,我知道了如何用.htaccess文件保护服务器上的文件夹,它运行良好(请查看http://scrabble.stats.org.pl/test/gcg/upl):

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

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

我发现了这个,这个和这个,并尝试了这些解决方案,但它们似乎不起作用。通常我会在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)部分。这些是特殊的关键词,还是我应该公开user:pass这些方法?

您的第一个链接似乎做了正确的事情。

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

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

btoa方法将数据编码为base64。

基本上,您只需发送一个基本身份验证的标头("Authorization",…),并作为数据提供用户名和密码。

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

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