#php #jquery #authentication
#php #jquery #аутентификация
Вопрос:
Я хочу создать систему входа с модальной загрузкой и PHP и jQuery, у меня этот режим отображается после нажатия кнопки входа :
<div class="modal fade" id="loginModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalCenterTitle">Login Page</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">amp;times;</span>
</button>
</div>
<div class="modal-body">
<div class="form-group">
<label for="exampleInputEmail1">Username</label>
<input type="text" name='username' class="form-control" id="username">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" name='password' class="form-control" id="password">
</div>
<div class="form-group form-check">
<input name='remember' type="checkbox" class="form-check-input" id="remember">
<label class="form-check-label" for="exampleCheck1">Remember me</label>
</div>
<button type="button" name='login' id='login' class="btn btn-primary mr-auto">Login</button>
</div>
</div>
</div>
</div>
итак, у меня есть эта функция входа в систему, которая зависит от класса пользователя :
function login($username ,$password)
{
$database = new Database();
$db = $database->connect();
$user = new User($db);
$user->username=$username;
if($user->check_user()){
$user->get_profile();
if( md5($password)==$user->password){
return 'logined successfully';
} else {
return 'password is wrong';
}
} else {
return 'username is wrong';
}
}
и login.php код страницы :
<?php
include_once('../includes/functions.php');
//login
if(isset($_POST['login'])){
$username = $_POST['username'];
$password = $_POST['password'];
$remember = $_POST['remember'];
$message=login($username ,$password); /// the error is here
if($message=='logined successfully' amp;amp; $remember =='on'){
$domain = ($_SERVER['HTTP_HOST'] != 'localhost:3308') ? $_SERVER['HTTP_HOST'] : false;
setcookie("username",$username,time() 31556926, '/', $domain, false );
} elseif($message=='logined successfully' amp;amp; $remember !='on') {
session_start();
$_SESSION['MM_Username'] = $username;
}
}
echo $message;
// end of login
?>
и JavaScript является :
<script>
$(document).ready(function(){
$('#login').click(function(){
var username =$('#username').val();
var password =$('#password').val();
if(document.getElementById("remember").checked==true){
var remember ='on';
} else {
var remember ='off';
}
if(username!='' amp;amp; password!=''){
console.log(remember);
$.ajax({
url:'login.php',
method : 'POST',
data :{username:username,password:password,remember:remember},
success:function(data){
if(data =='logined successfully'){
console.log(data);
$('#loginModal').hide();
location.reload();
} else {
console.log(data);
$('#loginModal').hide();
alert(data);
}
}
});
} else {
alert('Both username and password required!');
}
})
})
</script>
когда я регистрирую значение данных на консоли, оно выдает мне переменную сообщения, которая поступает из login.php не определено, я не знаю, в чем моя ошибка
Комментарии:
1. просто верните true / false из функции login(), затем установите сообщение, реорганизуйте его. logined — это не слово
2. но в функции входа в систему у меня должны появиться три разных сообщения
3. затем верните массив
['status' => true, 'message' => 'logined successfully']
но на самом деле вы хотите проверять значение true или false, а не строку4. вы также можете создать исключение из функции и перехватить его, а затем установить любое сообщение
5. Пожалуйста, не создавайте собственное хэширование пароля, особенно не используя
MD5()
илиSHA1()
. PHP предоставляет,password_hash()
иpassword_verify()
пожалуйста, используйте их для безопасности ваших пользователей.
Ответ №1:
вы используете индекс «login» в переменной posts в строке 4, но в jQuery ajax вы не передаете никаких данных для входа в запрос
итак, после завершения процесса в вашем php-файле нет переменной $message для эха, и ваш запрос возвращается пустым
используйте это как данные в jQuery ajax (мое предложение):
data: { login: 1, username: username, password: password, remember: remember },
или используйте это в файле php вместо «isset($_POST[‘login’])»:
if(isset($_SERVER['REQUEST_SCHEME']) AND $_SERVER['REQUEST_SCHEME'] == 'POST'){
Комментарии:
1. Большое спасибо, проблема заключалась в том, что я создал login.php внутри index.php поэтому сначала я использовал «isset ($ _POST[‘login’])», после того, как я переместил его в отдельный файл, я забыл удалить эту строку, я просто удалил ее, и это решило