【问题标题】:Flask session doesn't work in anoter url apart from the url of the flask app除了烧瓶应用程序的 url 之外,Flask 会话在另一个 url 中不起作用
【发布时间】: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 应用程序中,但由于某种原因,它总是对我说会话不存在。 我该怎么办?

【问题讨论】:

    标签: reactjs flask session-cookies


    【解决方案1】:

    “会话”是什么意思?如果你说的是 cookie,那可能是因为 cookie 是 http-only,这意味着客户端 JS 无法访问它。即使你改变了它,会话 cookie 也应该是“加密的”,这样只有服务器可以读取和修改它,而客户端不会对其进行修改。

    【讨论】:

    • 也许它只是 http-only,所以如果它是 http-only 我该如何解决?
    猜你喜欢
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2013-02-16
    相关资源
    最近更新 更多