【发布时间】:2015-08-14 03:33:39
【问题描述】:
我启动了一个具有基本注册/登录功能的 Android 应用程序。当我注册时,我的应用程序与 PHP 脚本 (PHP 5.6.11) 通信以将数据发送到我的数据库 (PostgreSQL 9.4),这工作正常。
我遇到的问题是我的登录功能,当从数据库中检索我的信息并使用 password_verify(password, 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
);
即使在阅读了许多关于这个确切问题的相同帖子后,我似乎也无法解决它。
【问题讨论】:
-
你应该输出一个 JSON 并做 android JSON 解析代码..
-
这一行 `$safe_password = pg_escape_string($input_password);` 可能是问题所在。删除它并针对 $input_password 进行测试
-
我建议使用 pgcrypto 扩展,它提供了基本但安全的方法来加密和检查密码。
-
#1 - 抱歉,我不确定你的意思。我真的在尝试使用 PHP 加密/解密我的密码。 #2 - 我尝试了 $input_password,它没有用。我还尝试从我将信息提交到注册时删除“pg_escape_string”,但它仍然没有用。 #3 - 我真的很想使用这个功能,它非常简单(即使我遇到了问题)。
标签: php postgresql