PHP - password_verify()总是返回false

时间:2015-08-14 03:33:39

标签: php postgresql

我开始使用基本注册/登录功能的Android应用程序。当我注册时,我的应用程序与PHP脚本(PHP 5.6.11)进行通信,以将数据发送到我的数据库(PostgreSQL 9.4),这可以正常工作。

我在登录功能上遇到的问题是,当从数据库中检索我的信息并使用password_verify(密码,db_hash)来验证我的登录时,这似乎从未验证为真。

我的示例代码和数据库值如下:

<?php

   // connecting, selecting database
   $dbhost = "host=127.0.0.1";
   $dbport = "port=5432";
   $dbname = "dbname=test";
   $dbcredentials = "user=test_user password=test75";

   $connection = pg_connect("$dbhost $dbport $dbname $dbcredentials");

   /* get user inputs */
   $input_username = $_POST["username"];
   $safe_username = pg_escape_string($input_username);

   $input_password = $_POST["password"];
   $safe_password = pg_escape_string($input_password);

   /* check if user credentials are correct and return user information */
   $query = "SELECT username, password, email FROM \"user\" WHERE username='$safe_username';";
   $result = pg_query($connection, $query);

   /* get database credentials (result, row, value) */
   $result_array = pg_fetch_array($result, 0, PGSQL_NUM);

   $db_username = $result_array[0];
   $db_password = $result_array[1];
   $db_email = $result_array[2];

   if (password_verify($safe_password, $db_password))
   {
      $current .= "Password is valid!" . "\r\n";
   } 
   else 
   {
      $current .= "Invalid password." . "\r\n";
   }

  // dump the result object
   var_dump($result);
   var_dump($db_password);

   // close the connection
   pg_close($connection);

?>

我检查了数据库中的用户名和哈希是否正常返回,他们是。值如下:

  

用户名=测试

     

密码=测试

     

哈希密码=   $ 2Y $ 10 $ OIHovXZZ1aAHLL32JkLdeeMXZDcZ8TgcI8TFw5SVCQ9zBiqNc8pP6

为了提供一些额外的信息,我的数据库表配置如下:

CREATE TABLE "user"
(
  userid serial NOT NULL,
  username text NOT NULL,
  password text NOT NULL,
  CONSTRAINT user_pkey PRIMARY KEY (userid)
)
WITH (
  OIDS=FALSE
);

即使在阅读了有关此确切问题的大量相同帖子后,我似乎无法解决此问题。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,在寻找解决方案后,我发现了这个问题

pg_fetch_array($sql_request)['password']只能被调用1次,然后一直返回false。