javascript - 我正在使用 jquery/ajax 进行登录。发送作品和服务器端返回登录,但这失败了

标签 javascript php jquery ajax

我已经用 PHP 创建了一个登录系统,但是,我还添加了两因素身份验证。我想无需刷新页面即可登录,这样在询问 2FA 代码时看起来会更好

我这样做的方法是通过 ajax 发送用户名和密码。我的 php 脚本然后检查这个然后它会回显登录或错误

这是我的javascript代码

$(document).ready(function() {
    $('#login-form').submit(function(e) {
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: 'inc/auth.php',
            data: $(this).serialize(),
            dataType: 'text',
            success: function(data)
            {
                alert(data);
                if (data === 'login') {
                    window.location = '/user-page.php';
                }
                else {
                    alert('Invalid Credentials');
                }
            },
        });
    });
});

这工作正常,当我提醒数据时我得到“登录”(显然没有引号)但是它不会将我发送到 user-page.php,相反,它会给我无效的凭据警报。尽管 php 页面返回登录,javascript 就像“不!” 我究竟做错了什么? 这是我的表格

<form class="form" id="login-form" name="login-form" method="post" role="form" accept-charset="UTF-8">
  <div class="form-group">
    <label class="sr-only" for="exampleInputEmail2">Gebruikersnaam</label>
    <input type="username" class="form-control" id="gebruikersnaam" name="gebruikersnaam" placeholder="gebruikersnaam" required>
  </div>
  <div class="form-group">
    <label class="sr-only" for="exampleInputPassword2">Wachtwoord</label>
    <input type="password" class="form-control" id="wachtwoord" name="wachtwoord" placeholder="Password" required>
    <div class="help-block text-right"><a href="">Forget the password ?</a></div>
  </div>
  <div class="form-group">
    <button type="submit" class="btn btn-primary btn-block">Sign in</button>
  </div>
</form>

我通过 <script src="auth.js"></script> 从这个页面运行 javascript .我也尝试将它直接放在脚本标签中,但也失败了。

最佳答案

这是为了测试目的 我相信您的 dataType 应该是 htmljson

$(document).ready(function() {
    $('#login-form').submit(function(e) {
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: 'inc/auth.php',
            data: $(this).serialize(),
            dataType: 'html',
            success: function(data)
            {
                alert(data);
                if (data == 'login') {
                    window.location = '/user-page.php';
                }
                if (data == 'failed') {
                    alert('Invalid Credentials');
                }

            },
        });
    });
});

在没有服务器逻辑的情况下 您的 php inc/auth.php 用于测试目的

//$gebruikersnaam= $_POST['gebruikersnaam'];
//$wachtwoord= $_POST['wachtwoord'];


$gebruikersnaam= 'nancy';
$wachtwoord= 'nancy123';

if($gebruikersnaam=='nancy' && $wachtwoord=='nancy123')
{
    echo "login";
}
else
{
    echo "failed";
}

至于SO Scholar在评论中提到的CSRF攻击。您将需要生成类似 md5 token 的东西,这些 token 将存储在 session 中。您现在将与每个请求一起发送,例如。在隐藏的表单中输入并验证它是否与服务器端的匹配。如果匹配允许登录,否则触发模拟

更新

$(document).ready(function() {
    $('#login-form').submit(function(e) {
        e.preventDefault();
        $.ajax({
            type: "POST",
            url: 'inc/auth.php',
            data: $(this).serialize(),
            dataType: 'JSON',
            success: function(data)
            {
                alert(data);
                if (data.login == 'success') {
                    window.location = '/user-page.php';
                }
                if (data.login == 'failed') {
                    alert('Invalid Credentials');
                }

            },
        });
    });
});

PHP

<?php
error_reporting(0);
$gebruikersnaam= 'nancy';
$wachtwoord= 'nancy123';

if($gebruikersnaam=='nancy' && $wachtwoord=='nancy123')
{
    $return_arr = array('login'=>'success');
}
else
{
    $return_arr = array('login'=>'failed');
}
echo json_encode($return_arr);

关于javascript - 我正在使用 jquery/ajax 进行登录。发送作品和服务器端返回登录,但这失败了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58294982/

相关文章:

javascript - 滚动后悬停功能

Javascript\\b字符串转义问题

javascript - Chrome使用jquery时出现问题

php - 切换语句以设置事件菜单项

php - 在线或离线功能 PHP

javascript - 如何编写供本地使用的 jquery 可链接函数?

javascript - 通过浏览器扩展在网络上每个页面的顶部插入一个栏

php - 从ajax请求中获取数据,这可能吗?

php - https 站点在本地打不开

javascript - 显示两个 jQuery 叠加层