向YouTube用户“ mmtuts”大喊大叫,因为这基本上是他的教程的副本(至少我学到了东西)(https://www.youtube.com/watch?v=LC9GaXkdxF8)。
这是我第一次尝试使用具有登录系统的网站。
TL; DR:我遇到了一个问题,即任何用户都无法使用正确的密码(显然该用户被接受,因为我在数据库中找不到错误“ wronguser”又名“ user”,但后来我发现了我的错误)
我正在使用MySQL和Apache(使用XAMPP)运行数据库。我试图重写数据库中的所有名称以及网站上的主要PHP索引(使用模态上的登录输入)。
react-datepicker/dist/react-datepicker-cssmodules.min.css1
寻找答案,并尝试修复至少1小时。抱歉,如果我的帖子违反了我可能不知道的任何规则。我之所以这样做是因为我知道这样的事情总是一个愚蠢的错误。
编辑1:如果需要,我可以提供更多代码。
mysqli_stmt_bind_param($stmt, "ss", $mailuid, $mailuid);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if ($row = mysqli_fetch_assoc($result)) {
$pwdCheck = password_verify($password, $row['Password']); <!-- CHECKS IF INSERTED PASSWORD = DATABASE PASSWORD FOR INSERTED USER -->
if ($pwdCheck == false) { <!-- IF PASSWORD DOESN'T MATCH WITH DATABASE PASSWORD FOR INSERTED USER THEN GO TO THIS "WRONG PASSWORD" ERROR PAGE (KEEPS GOING TO THIS PAGE) -->
header("Location: ../index.php?error=password_errada1");
exit();
}
else if($pwdCheck == true) { <!-- IF THE PASSWORD IS CORRECT THEN OPEN SESSION FOR THE INSERTED USER -->
session_start();
$_SESSION['userId'] = $row['idAluno'];
$_SESSION['userUid'] = $row['NumeroAluno'];
$_SESSION['userPrimeiroNome'] = $row['PrimeiroNome'];
$_SESSION['userUltimoNome'] = $row['UltimoNome'];
$_SESSION['userAno'] = $row['Ano'];
$_SESSION['userTurma'] = $row['Turma'];
$_SESSION['userRequisitou'] = $row['Requisitou'];
header("Location: ../index.php?login=login_sucesso");
exit();
}
dbStructure代码:
创建表$servername = "localhost";
$dBUsername = "root";
$dBPassword = "";
$dBName = "loginsystem";
$conn = mysqli_connect($servername, $dBUsername, $dBPassword, $dBName);
if (!$conn) {
die("Erro de conexão: ".mysqli_connect_error());
}
(
alunos
int(11)NOT NULL,
idAluno
varchar(7)NOT NULL,
NumeroAluno
varchar(50)NOT NULL,
Password
varchar(50)NOT NULL,
Email
varchar(25)NOT NULL,
PrimeiroNome
varchar(25)NOT NULL,
UltimoNome
int(2)NOT NULL,
Ano
varchar(8)NOT NULL,
Turma
int(1)非空默认值'0'
)ENGINE = InnoDB DEFAULT CHARSET = latin1;
答案 0 :(得分:0)
您的密码没有被散列。
尝试替换代码
if ($pwdCheck == false)
使用
if($password != $row['Password'])
如果可行,请重新检查您的密码被散列的脚本。
谢谢。
编辑1 :请同时更改else(如果有)部分,然后再次检查。我没有看到其他错误。
替换
else if($pwdCheck == true)
使用
else if($password == $row['Password'])
这应该可以解决您的问题。
答案 1 :(得分:0)
我是使用数据库页面手动保存密码的,显然保存的密码具有纯文本且没有被散列,因此,当我尝试使用PHP代码登录时,插入的密码将被散列并且散列的密码得到比较纯文本密码。
通过创建一个使用哈希密码创建用户的注册来解决此问题,从而使PHP比较“哈希” /“哈希”而不是“哈希-非哈希”。
也可以通过不在任何地方散列密码来解决(不安全,但很容易)。