Flask+React系统中注册新用户后无法立即创建会话,需重新登录才生效的问题求助
Flask+React系统中注册新用户后无法立即创建会话,需重新登录才生效的问题求助
我现在用React做前端,Flask+SQL做后端实现了登录/注册表单,目前登录、登出功能都正常,会话也能正常创建。但遇到一个头疼的问题:新用户注册的时候,所有流程都走得很顺畅——能创建新用户名、密码这些,也能直接访问需要权限的路由,但注册完成后并没有立即创建会话,必须先登出再重新登录,会话和Cookie才会正常生成。
下面是我的相关代码:
Flask后端注册路由
class Signup(Resource): def post(self): form_json = request.get_json() username = form_json.get("username") email = form_json.get("email") password = form_json.get("password") # Check if all required fields are provided if not username or not email or not password: return make_response({"error": "All fields are required: username, email, password"}, 400) # Check if the username or email already exists if User.query.filter_by(username=username).first(): return make_response({"error": "Username already taken"}, 400) if User.query.filter_by(email=email).first(): return make_response({"error": "Email already registered"}, 400) try: new_user = User(username=username, email=email) new_user.password = password # Use password setter for hashing db.session.add(new_user) db.session.commit() # Automatically sign in the new user session["user_id"] = new_user.id return make_response(new_user.to_dict(), 201) except Exception as e: return make_response({"error": str(e)}, 500) api.add_resource(Signup, '/signup')
React前端用户上下文(包裹整个应用)
import { createContext, useEffect, useState } from "react"; export const UserContext = createContext(); export const UserProvider = ({ children }) => { const [user, setUser] = useState(null); useEffect(() => { fetch("/check_session").then((response) => { if (response.ok) { response.json().then((user) => setUser(user)); } else { setUser(null); } }); }, []); const checkSession = () => { return fetch("/check_session", { credentials: "include" }).then( (response) => { if (response.ok) { return response.json().then((user) => { setUser(user); return user; }); } else { setUser(null); throw new Error("No active session"); } } ); }; useEffect(() => { checkSession().catch((error) => console.log("No active session on load:", error) ); }, []); const logInUser = (loginData) => { return fetch("/login", { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(loginData), credentials: "include", }).then((response) => { if (response.ok) { return response.json(); } else { throw new Error("Login failed"); } }); }; const logOutUser = () => { return fetch("/logout", { method: "DELETE", credentials: "include" }).then( (response) => { if (response.ok) { setUser(null); } else { throw new Error("Logout failed"); } } ); }; return ( <UserContext.Provider value={{ user, setUser, logInUser, logOutUser, checkSession }} > {children} </UserContext.Provider> ); };
我想要的效果是:用户注册完成后,自动登录的同时就能创建好会话,不用再手动登出登录一次。有没有大佬能帮忙看看问题出在哪?
备注:内容来源于stack exchange,提问作者Big McLargehuge
相关产品推荐
相关产品推荐

