除了烧瓶应用程序的 url 之外,Flask 会话在另一个 url 中不起作用
Posted
技术标签:
【中文标题】除了烧瓶应用程序的 url 之外,Flask 会话在另一个 url 中不起作用【英文标题】:Flask session doesn't work in anoter url apart from the url of the flask app 【发布时间】:2022-01-05 06:58:28 【问题描述】:我有 Flask 应用和 React 应用。 我在烧瓶应用程序上有会话。 我希望烧瓶会话也在我的 React 应用程序中。 这是烧瓶应用程序的一部分
@views.route("/login/<email>/<password>")
def log(email,password):
user = User.query.filter_by(email=email).first()
if user:
if check_password_hash(user.password, password):
session.permanent = True
session["user"] = email
infor_user = user
user_infor = "name": infor_user.username, "email": infor_user.email
return jsonify("success": user_infor)
else:
return jsonify("error": "Password is incorrect")
else:
return jsonify("error": "User doesn't exist")
@views.route("/checkuser")
def check_user():
if "user" in session:
user = session["user"]
infor_user = User.query.filter_by(email=user).first()
user_infor = "name": infor_user.username, "email": infor_user.email
return jsonify("user": user_infor)
else:
return jsonify("user": )
@views.route("/out")
def out():
session.pop("user",None)
return jsonify"message": "logged out""
这就是 React 应用程序。
import useContext,useState from "react"
import username from "./username"
function Login()
const [infor,setInfor] = useContext(username)
const [inusername, setInusername] = useState("")
const [password, setPassword] = useState("")
const [error, setError] = useState("")
if(infor)
return (
<div>You are already Logged in!!!</div>
)
const checkLogin = () =>
if(!inusername || !password)
setError("Those parts need to be writen")
else
console.log(`http://127.0.0.1:5000/log/$inusername/$password`)
fetch(`http://127.0.0.1:5000/log/$inusername/$password`)
.then((response) => response.json())
.then((data) =>
if ("error" in data)
setError(data["error"])
else
setInfor(data["seccess"])
);
return(
<div>
<p>error ? error : ""</p>
<input type="text" onChange=(e) => setInusername(e.target.value)/>
<input type="password" onChange=(e) => setPassword(e.target.value)/>
<button onClick=checkLogin>Login!</button>
</div>
)
export default Login
我试图让会话在 React 应用程序中,但由于某种原因,它总是对我说会话不存在。 我该怎么办?
【问题讨论】:
【参考方案1】:“会话”是什么意思?如果你说的是 cookie,那可能是因为 cookie 是 http-only,这意味着客户端 JS 无法访问它。即使你改变了它,会话 cookie 也应该是“加密的”,这样只有服务器可以读取和修改它,而客户端不会对其进行修改。
【讨论】:
也许它只是 http-only,所以如果它是 http-only 我该如何解决?以上是关于除了烧瓶应用程序的 url 之外,Flask 会话在另一个 url 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
会话不可用,因为没有设置密钥。将应用程序上的 secret_key 设置为唯一且机密的东西。烧瓶/Heroku