代码之家  ›  专栏  ›  技术社区  ›  Ardahan Kisbet

Nusoap不支持PHP password_hash函数?

  •  0
  • Ardahan Kisbet  · 技术社区  · 8 年前

    我正在为.net的登录过程编写一个简单的web服务。我在服务器端使用nusoap php库。在服务器端,我正在对给定的密码进行哈希运算,并在数据库中查询它,以检查是否存在这样的哈希密码。但是在.net中,我得到了一个错误,即响应是text/html格式,而它在等待text/xml格式。错误是password_hash函数找不到,但这是php的内置函数。我在单独的.php文件中检查了这些函数,并且它在加密和解密(password_verify)时都能正常工作。那么,在这种情况下,我哪里出错了? enter image description here enter image description here

    这是我的代码;

    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;
    }
    
    2 回复  |  直到 8 年前
        1
  •  0
  •   PHPDave    8 年前

    看起来你的头球有些问题。 服务器应发送回

    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

        2
  •  0
  •   Ardahan Kisbet    8 年前

    更新# 我找到了解决方案。在PHP-7中,即使当我在nusoaps服务器端调用password_hash时,PHP的Manual Page说password是内置的,它也无法识别这个函数。当我将其称为separate.php页面时,它会起作用。 最后,我从 github 它工作得很好。 我想,我安装错了PHP-7,或者它是一个错误。