简体   繁体   English

PHP - password_verify() 总是返回 false

[英]PHP - password_verify() is always returning false

I started an Android App with basic Register/Login functions.我启动了一个带有基本注册/登录功能的 Android 应用程序。 When I register, my app communicates with a PHP script (PHP 5.6.11) to send data to my database (PostgreSQL 9.4), which works fine.当我注册时,我的应用程序与 PHP 脚本 (PHP 5.6.11) 通信以将数据发送到我的数据库 (PostgreSQL 9.4),它工作正常。

The issue I'm having is on my Login function, when retrieving my information from the database and using password_verify(password, db_hash) to validate my login, which never seems to validate to true.我遇到的问题是我的登录功能,当从数据库中检索我的信息并使用 password_verify(password, db_hash) 来验证我的登录时,这似乎永远不会验证为真。

My sample code and database values are below:我的示例代码和数据库值如下:

<?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);

?>

I checked if my username and hash from the database were returning fine, and they are.我检查了我的用户名和数据库中的哈希是否正常返回,它们是。 The values are below:值如下:

username = testing用户名 = 测试

password = testing密码 = 测试

hashed password = $2y$10$OIHovXZZ1aAHLL32JkLdeeMXZDcZ8TgcI8TFw5SVCQ9zBiqNc8pP6散列密码 = $2y$10$OIHovXZZ1aAHLL32JkLdeeMXZDcZ8TgcI8TFw5SVCQ9zBiqNc8pP6

To provide some additional information, my database table is configured like so:为了提供一些额外的信息,我的数据库表配置如下:

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

Even after reading numerous identical posts regarding this exact issue I can't seem to resolve it.即使在阅读了许多关于这个确切问题的相同帖子之后,我似乎也无法解决它。

I had the same issue and after looking for the solution I found this我遇到了同样的问题,在寻找解决方案后我发现了这个

pg_fetch_array($sql_request)['password'] only can be invoked 1 time, after that it keeps returning false. pg_fetch_array($sql_request)['password']只能调用 1 次,之后一直返回 false。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM