PHP+React认证系统问题:账号确认跳转及持久化登录异常
PHP Token认证系统的核心问题:邮件确认跳转异常与持久化登录失效
问题1:邮件确认链接被错误重定向到登录页
搭建基于PHP的Token认证系统,用户注册后需通过邮件完成账号确认。点击确认链接本应处理Token并跳转至感谢页,但实际操作中被直接重定向到登录页;除此之外,其他页面也存在同类无理由跳转登录页的问题,尽管已在所有后端PHP页面中调用session_start()。
问题2:持久化登录失效与个人资料更新报错
目前仅在Dashboard页面通过useEffect、sessionStorage结合axios.get获取login.php设置的用户会话,其他页面仅从sessionStorage解析本地存储的用户数据,导致更新个人资料时触发**undefined array key 'user_id'**错误;尝试在所有页面都调用axios.get获取后端会话时,又会被强制重定向回登录页,仿佛从未登录过。虽然已在所有PHP页面开启session_start(),但$_SESSION['user_id']始终未被正确设置,使用isset()进行判断也无法解决该问题。
Dashboard.js代码
function Dashboard() { const navigate = useNavigate(); const[user, setUser] = useState(null); useEffect(() => { const storedUser = JSON.parse(sessionStorage.getItem("user")); if(storedUser){ setUser(storedUser); } else { axios.get("http://localhost/bachelor_exam/login.php") .then((response) => { if(response.data.length) { const user = { user_id: response.data[0].user_id, first_name: response.data[0].first_name, last_name: response.data[0].last_name, email: response.data[0].email, company: response.data[0].company, phone_number: response.data[0].phone_number, verified: response.data[0].verified, token: response.data[0].token, }; setUser(user); sessionStorage.setItem("user", JSON.stringify(user)); } else { navigate("/login"); } }) .catch((error) => { console.log(error); navigate("/login"); }); } }, [navigate]);
Profile.js代码(其他页面实现示例)
const Profile = () => { const navigate = useNavigate(); const[user, setUser] = useState(null); useEffect(() => { const storedUser = JSON.parse(sessionStorage.getItem("user")); if(storedUser){ setUser(storedUser); } else { navigate("/login"); } }, [navigate]);
update_profile.php代码(出现user_id未定义问题的文件)
try { $user_id = $_SESSION["user_id"]; $updatePassHash = password_hash($changedPassword, PASSWORD_DEFAULT); $q = $db->prepare("SELECT * FROM users WHERE email = :email"); $q->bindValue(":email", $changedEmail); $q->execute(); $rowCheckEmail = $q->fetch(); if($rowCheckEmail > 0){ http_response_code(400); echo json_encode("The email is already taken"); exit(); } else { $db->beginTransaction(); //the user changes their first name $q = $db->prepare("UPDATE users SET first_name = :first_name WHERE user_id = :user_id"); $q->bindValue(":user_id", $user_id); $q->bindValue(":first_name", $changedFirstName); $q->execute();
内容的提问来源于stack exchange,提问作者meii18
相关产品推荐
相关产品推荐

