在前端我使用ReactJs,我一直在嘗試透過axios.get從後端(PHP)獲取登入使用者的數據,為使用者設定一個條件,如果滿足,他們將返回登入頁面後端沒有返回任何內容,出現返回登入的情況是因為前端負責處理資料的檔案是空的,所以沒有回傳任何內容。
我已經設定了會話,將 $_SESSION[] 替換為 $_POST[],並將這些程式碼片段放置在頁面頂部:
error_reporting(E_ALL); ini_set('display_errors','1');
但沒有任何效果,且錯誤沒有顯示。我也在Postman 中進行了測試,它返回空,但是當我在x-www-form-urlencoded 中測試時,所有內容都已設定並以任何可能的方式寫入鍵和值,它返回400 錯誤,所有欄位都必須填寫.
在下面,我將發布登入和註冊的程式碼片段(其中處理用戶的輸入以發送到資料庫)。
登入
$db = _db(); try { $q=$db->prepare("SELECT * FROM users WHERE email = :email"); $q->bindValue(":email", $_POST["email"]); $q->execute(); $row = $q->fetch(); if(!empty($row)){ if (password_verify($_POST["password"], $row["password"])) { $user = array( "user_id" => $row["user_id"], "first_name" => $row["first_name"], "last_name" => $row["last_name"], "email" => $row["email"], "company" => $row["company"], "phone_number" => $row["phone_number"], "verified" => $row["verified"], "token" => $row["token"], ); header("Content-type: application/x-www-form-urlencoded"); http_response_code(200); echo json_encode($user); exit(); } else { header("Content-type: application/x-www-form-urlencoded"); http_response_code(400); echo json_encode("Wrong email or password"); exit(); } } else { header("Content-type: application/x-www-form-urlencoded"); http_response_code(400); echo json_encode("User does not exist"); exit(); }
註冊 - 也在這裡設定 $_SESSION,因為在確認帳戶後,我計劃將使用者直接重定向到儀表板
$q=$db->prepare("INSERT INTO users(user_id, first_name, last_name, company, email, phone_number, password, forgot_password, token, verified) VALUES(:user_id, :first_name, :last_name, :company, :email, :phone_number, :password, :forgot_password, :token, :verified)"); $q->bindValue(":user_id", null); $q->bindValue(":first_name", $firstName); $q->bindValue(":last_name", $lastName); $q->bindValue(":company", $company); $q->bindValue(":email", $email); $q->bindValue(":phone_number", $phoneNumber); $q->bindValue(":password", $passwordHash); $q->bindValue(":forgot_password", $forgotPass); $q->bindValue(":token", $token); $q->bindValue(":verified", false); $q->execute(); $user_id = $db->lastInsertId(); $to_email = $email; $subject = "Email subject"; $message = "Click on the following link to verify your account: <a href='http://localhost/api/confirm_account.php?token=$token'>Confirm your account</a>"; require_once(__DIR__."/emailVerification/send_email.php"); $user = array( "user_id" => $_SESSION["user_id"] = $row["user_id"], "first_name" => $_SESSION["first_name"] = $row["first_name"], "last_name" => $_SESSION["last_name"] = $row["last_name"], "email" => $_SESSION["email"] = $row["email"], "company" => $_SESSION["company"] = $row["company"], "phone_number" => $_SESSION["phone_number"] = $row["phone_number"], "verified" => $_SESSION["verified"] = $row["verified"], "token" => $_SESSION["token"] = $row["token"], ); header("Content-type: application/json"); http_response_code(200); echo json_encode($user); exit(); } }
這就是我在前端處理 POST/GET 請求的方式
const handleLogInSubmit = (event) => { event.preventDefault(); axios .post("http://localhost/api/login.php", { email: userInput.email, password: userInput.password, }) .then((response) => { if (response.data) { navigate("/dashboard"); } else { setErrorMessage("Login failed, try again"); } }) useEffect(() => { axios.get("http://localhost/api/login.php") .then((response) => { if(response.data){ setUser(response.data); console.log(response.data) } else { console.log(response) navigate("/login"); } }); }, [navigate]);
login.php 檔案的輸出
如果您需要查看其餘的前端和後端程式碼,請告訴我。
編輯:
現在,我可以看到程式碼出了什麼問題,但即使在收到訊息登入成功之後,我仍然不斷被重定向到登入頁面,只是看到axios.get不檢索任何內容,僅axios.post 起作用:
問題是您從前端發送
JSON
數據,但嘗試使用$_POST
來提取它根據文件適用於x-www-form -urlencoded
或multipart/form-data
表單資料。您可以發送後端期望的數據,而不是發送 JSON 數據,這是一串查詢參數: