首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角认证: http post未发送请求

角认证: http post未发送请求
EN

Stack Overflow用户
提问于 2017-02-22 15:02:19
回答 1查看 75关注 0票数 0

编辑:我想我把提交按钮放错了位置,因为从那时起我就让它工作了(事实上,请求没有被发送,因为我的函数没有被调用,这是典型的问题.)。

也是,身份验证总是成功的原因是,由于缺少params,所以完全跳过了通过我的DB进行的验证,所以跳过了这个步骤,没有回我的http_response_code,并且我被直接重定向到我的主页.

不确定我是否应该回答我自己,但是这个问题已经解决了,

我有一个有角度的应用程序,我使用POST params通过PHP文件进行身份验证(简单而又简单),但是当我单击submit时,没有发送任何请求,无论我的用户名/密码是否被填充(或者正确还是错误),身份验证是成功的,我直接进入我的主页。

它根本不检查条件是否好..。

My user.service :

代码语言:javascript
复制
angular
  .module("service")
  .factory("user", userService);

function userService($q, $http) {

  User.userConnected = null;
  User.getUserConnected = getUserConnected;
  User.setUserConnected = setUserConnected;


  // attribution des logs après validation
  function User() {
    this.nom = null;
    this.password = null;
    this.login = login;
  }

  // get last logged user
  function getUserConnected() {
    return User.userConnected;
  }

  // set last connected user as 'main' user
  function setUserConnected(user) {
    User.userConnected = user;
  }

  function login() {
    var there = this;
    var deferred = $q.defer();
    var params = 'nom='+this.nom+'&password='+this.password;
    $http({
        method: 'POST',
        url: '/api',
        data: params,
        headers: {'Content-Type': 'application/json'}
    })
    .success(function (success) {
      there.password = null;
      User.setUserConnected(there);
      deferred.resolve(success);
    })
    .error(function(error){
      deferred.reject(error);
    });
    return deferred.promise;
  }

  return User;
}

我的控制器:

代码语言:javascript
复制
//Controller login
.controller('LoginCtrl', function ($http, user, $state, $scope) {

  var vm = this;
  vm.errorMessage = null;
  vm.userLog = new user();
  vm.doLogin = doLogin;

//login -> on récupère les identifiants
  function doLogin() {
    vm.userLog
    .login()
    .then(_userLogged, _userRefused);
  }

// on success, go to Home page
  function _userLogged(success) {
    $state.go('home');
    console.log('OK!!!');
  }

// on error, show error
  function _userRefused(error) {
    vm.errorMessage = 'Combinaison login/mdp incorrect';
  }
})

My login.php :

代码语言:javascript
复制
<?php

if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400');
}

if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
        header("Access-Control-Allow-Headers:{$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
    exit(0);
}

// host/bdd settings
$hostname = '******.****.com';
$username = '*****';
$password = '*****';
$database = '*****';

try {
$pdo = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
  echo 'Connection bdd ok <br>';
}
catch (Exception $e)
{
        die('Erreur : ' . $e->getMessage());
}

//On récupère les identifiants
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);

$nom = $request->nom;
$password = $request->password;

if ($nom != "") {

  // Vérification des identifiants
  $req = $pdo->prepare('SELECT nom FROM users WHERE (nom = :nom AND password = :password)');
  $req->execute(array(
      'nom' => $nom,
      "password" => $password
    ));

  $rows = ($req->fetch(PDO::FETCH_OBJ));

  if (!$rows) //if pas de résultat correspondant
  {
      echo 'Mauvais identifiant ou mot de passe !';
  }
  else //sinon, tout est bon
  {
      foreach($rows as $row){
      echo json_encode($row);
      echo "<br> Vous êtes connecté !";
      }
  }
}
else {
  echo 'Indiquez votre pseudo';
}

?>

我的提交按钮看起来如下:

代码语言:javascript
复制
 <button class="button button-block button-positive" type="submit" ng-click="vm.doLogin()">Connexion</button>

它把我逼疯了,我真的不明白我的错误在哪里。我应该从我的http请求获得我的参数,它看起来很好,me..Any帮助将非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2017-02-22 15:13:15

这是因为您正在以不同的内容返回HTTP状态200,即使您是否找到了一个用户。这就是为什么下面的代码Java脚本运行如下:

代码语言:javascript
复制
.success(function (success) {
  there.password = null;
  User.setUserConnected(there);
  deferred.resolve(success);
})

如果正确实现负责检查用户名和密码的逻辑,则更改:

代码语言:javascript
复制
echo 'Mauvais identifiant ou mot de passe !';

代码语言:javascript
复制
die('Mauvais identifiant ou mot de passe !');

应该让它起作用,但它是不安全的。

请不要将用户密码作为文本存储在数据库中。

您应该使用http://php.net/manual/en/function.password-hash.php或其他散列策略。

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

https://stackoverflow.com/questions/42395074

复制
相关文章

相似问题

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