Недавно я интегрировал базовую c функцию входа / регистрации на свой веб-сайт и мне нужна помощь в понимании моего кода входа php. Учебник basi c, который я использовал для страницы входа / регистрации, не включал хеширование паролей, которое я сейчас пытаюсь интегрировать. Все работало на 100%, как и ожидалось, пока я не решил добавить хеширование паролей. Я очень новичок в php и в том, как это работает, поэтому я не совсем понимаю, почему мой код не работает, но я понимаю основную c концепцию / рабочий процесс хеширования паролей, ответы на которые можно найти в других вопросах.
Несколько примечаний: регистрация работает нормально, с сохранением хешированных паролей и соединение с базой данных успешно. Также у меня есть служба api, которая вызывает мой логин. php (код включен), что может быть проблемой.
Я протестировал свой SQL запрос SELECT *, password FROM users where email='jim@gmail.com'
, и он успешно возвращает 1 пользователя со всеми столбцами.
Редактировать: Я понимаю, что это не SQL доказательство инъекции, это мой следующий шаг. Я пытаюсь сделать это правильно, но простите меня, если мой текущий код не обрабатывает пароли правильно, это часть процесса обучения. (это не действующий веб-сайт)
Применимый код: логин. php
<?php
include_once("database.php");
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
if(isset($postdata) && !empty($postdata)){
$pwd = mysqli_real_escape_string($mysqli, trim($request->password));
$email = mysqli_real_escape_string($mysqli, trim($request->username));
$sql = "SELECT *, password FROM users where email='$email'";
if($result = mysqli_query($mysqli,$sql)){
$rows = array();
while($row = mysqli_fetch_assoc($result)){
$rows[] = $row;
}
if(password_verify($pwd, $rows['password'])){
echo json_encode($rows);
}
}
else{
http_response_code(404);
}
}
?>
Я пробовал использовать как $ row, так и $ rows в строке password_verify($pwd, $rows['password'])
на всякий случай Я не понимаю тип полученного объекта.
Register. php
<?php
include_once("database.php");
$postdata = file_get_contents("php://input");
if(isset($postdata) && !empty($postdata)){
$request = json_decode($postdata);
$name = trim($request->name);
$pwd = mysqli_real_escape_string($mysqli, trim($request->pwd));
$email = mysqli_real_escape_string($mysqli, trim($request->email));
$hash = password_hash($pwd, PASSWORD_BCRYPT);
$sql = "INSERT INTO users(name,password,email) VALUES ('$name','$hash','$email')";
if ($mysqli->query($sql) === TRUE) {
$authdata = [
'name' => $name,
'pwd' => '',
'email' => $email,
'Id' => mysqli_insert_id($mysqli)
];
echo json_encode($authdata);
}
}
?>
api.service.ts (сокращенно)
public userlogin(username, password) {
//alert(username)
return this.httpClient.post<any>(this.baseUrl + '/login.php', { username, password })
.pipe(map(Users => {
this.setToken(Users[0].name);
this.getLoggedInName.emit(true);
return Users;
}));
}
public userregistration(name,email,pwd) {
return this.httpClient.post<any>(this.baseUrl + '/register.php', { name,email, pwd })
.pipe(map(Users => {
return Users;
}));
}
Я не совсем понимаю, как служба api прослушивает выходные данные из входа в систему. php но похоже, что строка echo json_encode($rows);
из входа в систему. php - это выход ?? Большое спасибо за любые советы, советы или решения!