laravel - 密码哈希::检查不起作用(SQL + Laravel)
问题描述
我的网站登录系统使用 laravel 框架。然后,我为该网站创建了一个 android 应用程序并创建了一个单独的login.php,以便让人们从 android 应用程序登录。该文件上传到public_html目录。
在验证Hash::check之前,问题用户无法登录。Hash::check对于某些我不知道的原因不起作用!
登录.php
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Hash;
$email = 'xxxx';
$password = 'xxxx';
$token = $_POST["token"];
$con=mysqli_connect("localhost", "xxxx", "xxxx", "xxxx");
$sql = "SELECT * FROM users WHERE email = '$email'";
$result = mysqli_query($con, $sql);
if($result) {
if (mysqli_num_rows($result) >= 1 ) {
$row = mysqli_fetch_assoc($result);
$hashPassword = '$row["password"]';
if (Hash::check($password, $hashPassword))
{
$response = array("success" => "1", "user_details" => $row, "message"=>"You have been logged in successfully");
}
} else {
$response = array("success" => "0", "message"=>"Please enter valid email and password");
}
} else {
$response = array("success" => "0", "message"=>"Server error");
}
header('Content-type: application/json');
echo json_encode($response);
?>
更新:
我手动尝试了 Hash::make 和 Hash::check 但它们不起作用!
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use App\Http\Controllers\Controller;
手动哈希密码:
$password = 'JohnDoe';
$hashedPassword = Hash::make($password);
echo $hashedPassword;
解决方案
这可能是对我有用的临时解决方案。我从数据库中获取了散列密码并将其与发布的密码进行了比较。
我更换了:
Hash::check($password, $hashedPassword)
和:
password_verify($password, $hashedPassword)
<?php
$email = $_POST["email"];
$password = $_POST["password"];
$token = $_POST["token"];
$con=mysqli_connect("localhost", "xxxx", "xxxx", "xxxx");
$sql = "SELECT * FROM users WHERE username = '$email'";
$result = mysqli_query($con, $sql);
if($result){
if (mysqli_num_rows($result)>= 1 ) {
$json_array['user_details'] = array();
while($row = mysqli_fetch_assoc($result)){
$json_array['user_details'][] = $row;
$roww = $row['password'];
}
if(password_verify($password, $roww)){
$response = array("success" => "1", "user_details" => $json_array, "message"=>"You have been logged in successfully");
$sql = "UPDATE users SET token='$token' WHERE email='$email'";
$result = mysqli_query($con, $sql);
}else{
$response = array("success" => "0", "message"=>"Please enter valid email and password");
}
}
}else{
$response = array("success" => "0", "message"=>"Server error");
}
header('Content-type: application/json');
echo json_encode($response);
推荐阅读
- sas - If-then-else 在 SAS 中的工作原理
- android - Android - 展开视图的高度和宽度
- android - 在 Android 上使用 Google 身份提供程序进行 Cognito 用户池身份验证
- ios - 当 NSKeyedUnarchiver.unarchivedObject 有 CoreText 问题时 NSAttributedString 的 iOS 13 字体
- c++ - 有人可以举一个使用多个功能的例子吗?
- express - 对 FE 和 BE 上的相同路由使用 createProxyMiddleware,同时避免 CORS
- azure-language-understanding - 关于改进 LUIS 语音识别的具体问题
- javascript - 使用搜索而不是数据列表创建下拉列表的正确方法是什么?
- cordova - 如何在 ionic 或任何混合应用程序中实现视频和音频聊天?
- fortran - 使用 OpenMP 并行化包含指针数组的可分配类型的英特尔 Fortran 代码