Rencontre avec un écran noir lors de la tentative de récupération des données utilisateur à partir du backend
P粉921130067
P粉921130067 2024-03-29 11:08:15
0
1
385

Sur le frontend, j'utilise ReactJs et j'ai essayé d'obtenir les données de l'utilisateur connecté depuis le backend (PHP) via axios.get, définir une condition pour l'utilisateur et si elle est remplie, elle sera renvoyée à la page de connexion Le backend ne renvoie rien et le retour apparaît. En cas de connexion, car le fichier dans lequel le front-end est chargé de traiter les données est vide, rien n'est renvoyé.

J'ai configuré la session, remplacé $_SESSION[] par $_POST[] et placé ces extraits de code en haut de la page :

error_reporting(E_ALL);
ini_set('display_errors','1');

Mais rien ne fonctionne et l'erreur ne s'affiche pas. J'ai également testé dans Postman et il est revenu vide, mais lorsque j'ai testé dans x-www-form-urlencoded avec tout défini et les clés et valeurs écrites de toutes les manières possibles, il a renvoyé une erreur 400, tous les champs doivent être remplis .

Ci-dessous, je publierai des extraits de code pour la connexion et l'enregistrement (où la saisie de l'utilisateur est traitée pour être envoyée à la base de données).

Connexion

$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();
        
            }

Inscription - Définissez également $_SESSION ici car après avoir confirmé le compte, je prévois de rediriger l'utilisateur directement vers le tableau de bord

$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();
        }
    }

C'est ainsi que je gère les requêtes POST/GET sur le frontend

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]);

Sortie du fichier login.php

Si vous avez besoin de voir le reste du code frontend et backend, veuillez me le faire savoir.

Éditeur :

Maintenant, je peux voir ce qui ne va pas avec le code mais même après avoir reçu le message Connexion réussie Je continue d'être redirigé vers la page de connexion et je vois juste qu'axios.get ne récupère rien, seulement axios.post fonctionne :

P粉921130067
P粉921130067

répondre à tous(1)
P粉364642019

Le problème est que vous envoyez JSON 数据,但尝试使用 $_POST 来提取它 根据文档适用于 x-www-form-urlencodedmultipart/form-data les données du formulaire depuis le frontend.

Au lieu d'envoyer des données JSON, vous pouvez envoyer les données attendues par votre backend, qui sont une chaîne de paramètres de requête :

.post("http://localhost/api/login.php", new URLSearchParams({
  email: userInput.email,
  password: userInput.password,
}))
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal