首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Angular 5 to PHP POST总是返回403

Angular 5 to PHP POST总是返回403
EN

Stack Overflow用户
提问于 2018-06-06 05:42:42
回答 1查看 391关注 0票数 0

我有一个可以工作的版本,但经过一些更改(我不知道是什么),它不再工作了。现在,我把所有东西都带回了一个非常简单的应用程序,以确保没有其他东西会阻碍它。是的,我知道这是糟糕的实践代码,但这无关紧要,我只想知道这是哪里出了问题。

现在我的代码,它不是所有的,但我认为这是你需要的一切,以了解我的代码做了什么。

Angular:

表格:

代码语言:javascript
复制
<form>
  <table cellspacing="0">
    <tr>
      <td>
          <input placeholder="Username" class="form-control" [(ngModel)]="username" name="username" required>
      </td>
    </tr>
    <tr>
      <td>
        <input placeholder="Password" class="form-control" [(ngModel)]="password" type="password" name="password" required>
      </td>
    </tr></table>
</form>
<button mat-raised-button (click)="loginUser()" class="btn btn-primary" color="primary">Login</button>

组件:

代码语言:javascript
复制
loginUser() : void {
    let result = this.LoginService.loginUser(this.username, this.password);
    if (result === false) {
      this.wrongLoginNotification = 'Je hebt de onjuiste inloggegevens gebruikt!';
    }
  }

服务:

代码语言:javascript
复制
  private loginUrl = 'http://www.url.nl/path/api/?login=true';


  loginUser(username: string, password: string): boolean {
    let auth = {username: username, password: password};
    let authJson = JSON.stringify(auth);

    this.http.post(this.loginUrl, authJson)
      .subscribe(
        data => {
          this.router.navigate(["home"]);
          return true;
        },
        err => {
          return false;
        }
      );

    return false;
  }

将此帖子到服务器:

代码语言:javascript
复制
{password: "TEST", username: "TEST1"}

PHP脚本非常简单,仅此而已:

代码语言:javascript
复制
error_reporting(E_ALL);
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");

$servername = ""; // Changed this of course ;-)
$username = ""; // Changed this of course ;-)
$password = ""; // Changed this of course ;-)
$dbName = ""; // Changed this of course ;-)
$conn = null;

try
{
  $conn = new PDO("mysql:host=$servername;dbname=$dbName", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
  echo "Connection failed: " . $e->getMessage();
  header("HTTP/1.1 404");
}

if (isset($_GET['login'])) {
  echo 'Test';
}

现在PHP api (在相同的域/url上)返回:

代码语言:javascript
复制
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /myurl/api/
on this server.<br />
</p>
<p>Additionally, a 403 Forbidden
error was encountered while trying to use an ErrorDocument to handle the request.</p>
</body></html>

我都试了些什么?

我用.htaccess文件做了几件事,比如添加:

Header添加Access-Control-Allow-Origin:* Header add Access-Control-Allow-Methods:"GET,POST,OPTIONS,DELETE,PUT"

我也在联系我的主办方。有人有什么建议吗?我确实看到很多关于这个主题的问题,每个人都有其他的解决方案。什么是过滤这一点并获得正确结果的最佳方法?我现在只是在尝试一些事情,而不是遵循一个列表或一些可能会让我找到解决方案的东西。

任何帮助都将非常受欢迎!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-06 05:48:55

Header需要在任何其他输出之前调用。因此,您的try/catch代码块如下所示:

代码语言:javascript
复制
try
{
  $conn = new PDO("mysql:host=$servername;dbname=$dbName", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e)
{
  header("HTTP/1.1 404");
  echo "Connection failed: " . $e->getMessage();
}

编辑:也要尝试删除authJSON并使用auth。只需直接传递JSON对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50709370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档