В чём суть вопроса: Я написал код в Java, который обращается к скрипту и отправляет ему данные, которые ввёл пользователь(логин и пароль). Скрипт должен брать данные из БД(MySQL) и сравнивать их с теми, что получил от пользователя и возвращать ответ(Bad Login - неправильные логин или пароль. WV - неверная версия лаунчера. При успешном логине - пароль, никнейм и сессию пользователя).
Всё запускается и кажется, что работает, ошибок нет, но при вводе правильного логина и пароля авторизация не проходит. Всё никак не могу понять почему, весь инет перешерстил.. Надеюсь поможете.
Скрипт php
Код:
include ('conn.php'); //Вызываем файл с коннектом
$act = mysqli_real_escape_string($connect, $_POST['a']); // Честно скажу, я не знаю что это, в гайде сказали написать
$lgn = mysqli_real_escape_string($connect, trim(htmlspecialchars($_POST['user'])));
$passw = mysqli_real_escape_string($connect, trim($_POST['password']));
if((preg_match('/'.$version.'/i', $_SERVER['HTTP_USER_AGENT']))) { //Проверяяем версию
if (($act == 'index') && ($lgn !== null) && ($passw !== null)) { //Проверяем действие и введен ли логин с паролем
$sql = "SELECT $db_upass FROM `db_table` WHERE $db_name='$lgn'";
$result = mysqli_query($connect, $sql) or die ("AuthErr1"); //Выполняем действие, если не вышло выводим ошибку
$row = mysqli_fetch_array($result); // Создаём переменную с результатом
$hash = $row[$db_password]; //Задаём переменную с паролем, который задаёт пользователь
$session = rand(99999,9999999999); //Присваиваем сессии рандомное значение
$temp = "UPDATE `$db_table` SET $db_sess='$session' WHERE $db_name = '$lgn'"; //Задаём команду для выполнения в БД
$query = mysqli_query($connect, $temp) or die ("AuthErr2"); //Выполняем, при ошибке выводим ошибку
if($passw == $hash) { //Сравниваем пароль, введённый пользователем и пароль с БД
echo $hash.'<>'.$lgn.'<>'.$session; //Если они совпадают выводим пароль, логин, сессию, разделённые знаком "<>"
} else {
echo 'Bad Login'; // Если не совпадают - выводим Bad Login
}
}
} else {
die('WV'); //Если неверная версия, выводим WV
}
Функция коннекта к скрипту из Java
Код:
import javax.net.ssl.HttpsURLConnection;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
public class util {
public static String Connect(String sURL, String Params) {
HttpsURLConnection connection = null;
try {
URL url = new URL(sURL);
connection = (HttpsURLConnection) url.openConnection();
// Задаём параметры подключения
connection.setRequestMethod("POST");
connection.setRequestProperty("User-Agent", "TypicalLauncher v0.1b");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", Integer.toString(Params.getBytes().length));
connection.setRequestProperty("Content-Language", "en-US");
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.connect(); //Подключаемся
try(DataOutputStream dos = new DataOutputStream(connection.getOutputStream())) {
dos.writeBytes(Params); //Отправляем данные файлу
dos.flush();
}
InputStream is = connection.getInputStream(); // Принимаем данные от файла
StringBuilder resp;
try(BufferedReader brd = new BufferedReader(new InputStreamReader(is))) {
resp = new StringBuilder();
String line;
while((line = brd.readLine()) != null) {
resp.append(line);
resp.append('\r');
}
}
String strn = resp.toString().trim();
return strn;
}catch (Exception ex){
return null;
} finally {
if(connection != null) {
connection.disconnect();
}
}
}
}
Функция, которую не знаю как правильно назвать.. Она отправляет логин+пароль в функцию подключения к скрипту, затем, исходя из ответа говорит, прошла ли авторизация
Код:
public static boolean Authorizze(final String user, final String pass){
String temp1 = "a=auth" + "&user=" + user + "&password=" + pass;
String AuthResult = util.Connect(URLEncoder.encode("https://murmuring-harbor-70003.herokuapp.com", StandardCharsets.UTF_8), URLEncoder.encode(temp1, StandardCharsets.UTF_8));//Задаём параметры
if(AuthResult == null) {
return false;
}else {
switch (AuthResult) {
case "Bad Login":
return false;
case "WV":
version = true;
return false;
default:
try {
AuthData = AuthResult.split("<>");
return true;
} catch (Exception ex) {
return false;
}
}
}}