Я хеширую пароль моего пользователя в SQL Server 2008 R2.
Регистрация идет нормально. Хешированный пароль правильно сохраняется через этот код:
$password = password_hash($password, PASSWORD_DEFAULT);
// Insert the new user into the database
$insert_stmt = $db->conn->prepare("INSERT INTO $db->DB_NAME.dbo.SGU_USUARIO (USUARIO, EMAIL, CONTRASENA, RUT_ALUMNO, ID_PERFIL)". " VALUES (:USUARIO, :EMAIL, :CONTRASENA, :RUT_ALUMNO, :ID_PERFIL)");
$insert_stmt->bindParam(':USUARIO', $usuario, PDO::PARAM_STR);
$insert_stmt->bindParam(':EMAIL', $email, PDO::PARAM_STR);
$insert_stmt->bindParam(':CONTRASENA', $password, PDO::PARAM_STR);
$insert_stmt->bindParam(':RUT_ALUMNO', $rut_alum, PDO::PARAM_STR);
$insert_stmt->bindParam(':ID_PERFIL', $id_perfil, PDO::PARAM_INT);
if (! $insert_stmt->execute()) {
$error_msg = '<div class="alert alert-danger"><strong>Error!</strong> Registro de usuario fallido.</div>';
}else{
$error_msg = '<div class="alert alert-success">Usuario registrado exitosamente.</div>';
}
Когда я хочу сделать скрипт входа, я делаю следующее:
if ($stmt = $db->conn->prepare("SELECT * FROM $db->DB_NAME.dbo.SGU_USUARIO WHERE EMAIL = :EMAIL")) {
$stmt->bindParam(':EMAIL', $email, PDO::PARAM_STR);
$stmt->execute();
$resultado = $stmt->fetch(PDO::FETCH_ASSOC);
if(!empty($resultado)){
if (password_verify($password, $resultado['CONTRASENA'])) {
// Password is correct!
// Get the user-agent string of the user.
$user_browser = $_SERVER['HTTP_USER_AGENT'];
// XSS protection as we might print this value
$user_id = preg_replace("/[^0-9]+/", "", $user_id);
$_SESSION['user_id'] = $user_id;
// XSS protection as we might print this value
$resultado['USUARIO'] = preg_replace("/[^a-zA-Z0-9_\-]+/",
"",
$resultado['USUARIO']);
$_SESSION['username'] = $resultado['USUARIO'];
$_SESSION['login_string'] = hash('sha512',
$resultado['CONTRASENA'] . $user_browser);
// Login successful.
return true;
}
}
Это всегда возвращает false, потому что по какой-то причине информация о пользователях приходит с проблемой в электронном письме и хешированном пароле.
Если я делаю var_dump () из информации о пользователях, которую я получаю с первым запросом, я получаю это:
array (size=6)
'ID_USUARIO' => string '1' (length=1)
'USUARIO' => string 'joshe.onate' (length=11)
'EMAIL' => string '�|����� |�����!���' (length=20)
'CONTRASENA' => string '�|�����`|�����!�������! �������RUT_ALUMNO�����!�������!���' (length=60)
'RUT_ALUMNO' => string '166604168' (length=9)
'ID_PERFIL' => string '2' (length=1)
|� |�!
|�`|�!!RUT_ALUMNO!!
По какой-то причине поля хеширования и электронной почты прибывают с проблемами.
Спасибо заранее за вашу помощь.
Итак, моя проблема была в том, что в SQl Server я сказал, что эти поля были MAX varchar.
Я оставляю это в varchar (100), и все возвращается правильно.
Других решений пока нет …