编辑:我想我把提交按钮放错了位置,因为从那时起我就让它工作了(事实上,请求没有被发送,因为我的函数没有被调用,这是典型的问题.)。
也是,身份验证总是成功的原因是,由于缺少params,所以完全跳过了通过我的DB进行的验证,所以跳过了这个步骤,没有回我的http_response_code,并且我被直接重定向到我的主页.
不确定我是否应该回答我自己,但是这个问题已经解决了,!
我有一个有角度的应用程序,我使用POST params通过PHP文件进行身份验证(简单而又简单),但是当我单击submit时,没有发送任何请求,无论我的用户名/密码是否被填充(或者正确还是错误),身份验证是成功的,我直接进入我的主页。
它根本不检查条件是否好..。
My user.service :
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;
}我的控制器:
//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 :
<?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';
}
?>我的提交按钮看起来如下:
<button class="button button-block button-positive" type="submit" ng-click="vm.doLogin()">Connexion</button>它把我逼疯了,我真的不明白我的错误在哪里。我应该从我的http请求获得我的参数,它看起来很好,me..Any帮助将非常感谢!
发布于 2017-02-22 15:13:15
这是因为您正在以不同的内容返回HTTP状态200,即使您是否找到了一个用户。这就是为什么下面的代码Java脚本运行如下:
.success(function (success) {
there.password = null;
User.setUserConnected(there);
deferred.resolve(success);
})如果正确实现负责检查用户名和密码的逻辑,则更改:
echo 'Mauvais identifiant ou mot de passe !';至
die('Mauvais identifiant ou mot de passe !');应该让它起作用,但它是不安全的。
请不要将用户密码作为文本存储在数据库中。
您应该使用http://php.net/manual/en/function.password-hash.php或其他散列策略。
https://stackoverflow.com/questions/42395074
复制相似问题