我开始使用基本注册/登录功能的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
);
即使在阅读了有关此确切问题的大量相同帖子后,我似乎无法解决此问题。
答案 0 :(得分:0)
我遇到了同样的问题,在寻找解决方案后,我发现了这个问题
pg_fetch_array($sql_request)['password']
只能被调用1次,然后一直返回false。