0

我正在使用 Angular CLI 构建的 SPA 中开发登录页面功能。我的后端是 tomcat,php 和 mysql 在托管服务器上,我能够通过 post call 使用 httpclient 模块成功连接、获取和更新应用程序中的所有其他内容。我使用代理运行 CLI。应用程序在 localhost:4200 运行

没有授权标头,API 调用成功,我得到正确的响应:

{"status":true,"resp":"Login Success."} 

从我的 login.php 文件中。

登录服务:

const headers = new HttpHeaders({
  'Content-Type': 'application/x-www-form-urlencoded',
  'Authorization': 'Basic ' + btoa(email+':'+pwd)    <---Including this line gives me error
});

当我添加这一行 'Authorization': 'Basic' + btoa(email+':'+pwd) 时,API 调用本身会失败。它甚至没有显示它是控制台中的 OPTIONS/POST。它在 zone.js 中的某行给出(失败的)net::ERR_EMPTY_RESPONSE 。不确定这个角度问题。

我在控制台中看到的请求标头:

Provisional headers are shown
Accept: application/json, text/plain, */*
Authorization: Basic YXNkZjphc2Rm
Content-Type: application/x-www-form-urlencoded
Referer: http://localhost:4200/home
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36

下面是截图链接。 在此处输入图像描述

/public-html/project/api/login.php:

header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header ("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token, Access-Control-Allow-Headers, Authorization, X-Requested-With");

    $json = file_get_contents('php://input');
    $data = json_decode($json,true);

我也尝试了大多数 .htaccess 解决方案。没有任何效果。

.htaccess(在 /public_html 中):

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

//Tried this too
RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

Header add Access-Control-Allow-Credentials true
    Header add Access-Control-Allow-Methods "GET, POST, PUT, HEAD, OPTIONS, DELETE, PATCH"
    Header add Access-Control-Allow-Headers *
    Header always set Access-Control-Expose-Headers "*"
    Header add Access-Control-Allow-Origin *
    Header set Connection keep-alive
    Header set Access-Control-Max-Age "3600"
    Header set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token"

当我使用基本身份验证时,相同的请求在邮递员中有效,我也可以在 php 脚本中打印授权标头。但它在浏览器中不起作用,有什么想法吗?自 2 天以来一直受到打击。无法让这个工作。我不想在 POST formData 中公开用户名/密码,但想在授权标头中发送它。我怎样才能让它工作?我应该在子文件夹中的某处添加 .htaccess 吗?

4

0 回答 0