Nusoap 不适用于 PHP password_hash 功能?
Nusoap doesn't work with PHP password_hash function?
我正在为 .net 的登录过程编写一个简单的 Web 服务。我在服务器端使用 nusoap php 库。在该服务器端,我正在散列给定密码并在数据库中查询它以检查是否存在这样的散列密码。但是在 .net 中,我收到错误消息,即在等待 text/xml 格式时响应为 text/html 格式。错误是 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;
}
您的 headers 似乎出了点问题。
服务器应该发回
header("Content-Type: text/xml\r\n");
而是发回
header("Content-Type: text/html\r\n");
也许检查您的 WSDL 文件或弄清楚为什么您不输出 xml 回客户端
不知道你有没有遇到这个错误https://github.com/fergusean/nusoap/blob/463c772ae805aed7f396d89e6dce1dc0ce4c038b/lib/class.soap_server.php#L295
更新#
我找到了解决方案。在 PHP-7 中,即使 PHP 的手册页说 password_hash 是内置的,当我在 nusoaps 服务器端调用它时,它也无法识别此功能。当我将其称为单独的 .php 页面时,它可以正常工作。
所以最后我从 github 下载了密码哈希库,它工作得很好。
我想,我安装错了 PHP-7 或者这是一个错误。
我正在为 .net 的登录过程编写一个简单的 Web 服务。我在服务器端使用 nusoap php 库。在该服务器端,我正在散列给定密码并在数据库中查询它以检查是否存在这样的散列密码。但是在 .net 中,我收到错误消息,即在等待 text/xml 格式时响应为 text/html 格式。错误是 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;
}
您的 headers 似乎出了点问题。 服务器应该发回
header("Content-Type: text/xml\r\n");
而是发回
header("Content-Type: text/html\r\n");
也许检查您的 WSDL 文件或弄清楚为什么您不输出 xml 回客户端
不知道你有没有遇到这个错误https://github.com/fergusean/nusoap/blob/463c772ae805aed7f396d89e6dce1dc0ce4c038b/lib/class.soap_server.php#L295
更新# 我找到了解决方案。在 PHP-7 中,即使 PHP 的手册页说 password_hash 是内置的,当我在 nusoaps 服务器端调用它时,它也无法识别此功能。当我将其称为单独的 .php 页面时,它可以正常工作。 所以最后我从 github 下载了密码哈希库,它工作得很好。 我想,我安装错了 PHP-7 或者这是一个错误。