【发布时间】:2016-02-06 02:55:09
【问题描述】:
我正在为 .net 的登录过程编写一个简单的 Web 服务。我在服务器端使用 nusoap php 库。在该服务器端,我正在散列给定密码并在数据库中查询它以检查是否存在这样的散列密码。但在.net 中,我收到错误消息,响应是文本/html 格式,而它正在等待文本/xml 格式。错误是 password_hash 函数没有找到,但这是 php 的内置函数。我检查了单独的 .php 文件中的函数,它在加密和解密(password_verify)时没有错误。那么在这种情况下我哪里出错了?
这是我的代码;
function systemLogin($mycomplexlogin)
{
$result=NULL;
$conn=openConnection();
// Check connection
if ($conn->connect_error)
{
//return("Connection failed: " . $conn->connect_error);
return $result;
}
$EnterpriseId=mysqli_real_escape_string($conn,$mycomplexlogin["EnterpriseId"]);
$UserName=mysqli_real_escape_string($conn,$mycomplexlogin["UserName"]);
$Password=$mycomplexlogin["Password"];
$cost=10;
$hash="";
$hash=password_hash($Password, PASSWORD_BCRYPT, ["cost" => $cost]);
/* create a prepared statement */
$stmt = $conn->stmt_init();
// prepare and bind
if($stmt = $conn->prepare("SELECT * FROM mydatabase.USERS WHERE BINARY username=?"))
{
$stmt->bind_param("s", $UserName);
// execute query
$stmt->execute();
/* bind result variables */
$stmt->bind_result($resultId,$resultLastName,$resultFirstName,$resultAddress,$resultPosition,$resultManager,$resultUserName,$resultPass);
/* fetch value */
if($stmt->fetch())
{
if(password_verify($Password,$hash))
{
//date("Y-m-d H:i:s");
$token=date("Y-m-d H:i:s");
$result= array(
'Id' => $resultId,
'LastName'=>$resultLastName,
'FirstName' => $resultFirstName,
'Address'=>$resultAddress,
'Position'=>$resultPosition,
'Manager'=>$resultManager,
'Password' => $resultPass,
'UserName' => $resultUserName,
'Token' => $token
);
}
}
// close statement
$stmt->close();
}
mysqli_close($conn);
return $result;
}
【问题讨论】:
-
我忘了提及我已经在数据库中定义了一个客户端,并且已经存储了它的哈希密码。
标签: php web-services nusoap