You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CherryPy如何获取Ajax GET请求的用户名返回登录访问令牌

问题原因

你当前无法在auth方法中获取到用户名参数,核心是两处写法错误:

  • 前端$.get传参逻辑错误:GET请求无请求体,你对参数做JSON.stringify后传入,jQuery不会自动将其拼接为URL查询参数,服务端根本接收不到该字段。
  • 后端auth方法未定义参数接收入口:CherryPy会自动将URL查询参数绑定到暴露方法的同名形参上,你当前方法未声明接收username的形参,自然无法拿到传入值。
修正方案

1. 调整前端请求代码

去掉JSON.stringify逻辑,直接向$.get传入JS对象,jQuery会自动将对象序列化为标准URL查询参数拼接在请求地址后:

$(document).ready(function() {
    let username = sessionStorage.getItem('username'); 
    // 直接传对象,无需转JSON字符串
    var requestParams = { "username": username };

    $.get("/user/auth", requestParams,
    function(res) {
        console.log(res);
        // 可补充校验失败跳转逻辑
        if(res.authentication !== "Ok") {
            location.href = "/";
        }
    });
});

2. 调整后端auth方法

给方法增加username形参用于接收入参,补全登录状态校验逻辑:先校验参数是否存在,再校验该用户对应的session是否有效,校验通过再返回访问令牌,校验失败返回对应错误状态码:

@cherrypy.expose
def auth(self, username=None):
    # 校验参数是否存在
    if not username:
        cherrypy.response.status = 400
        cherrypy.response.headers["Content-Type"] = "application/json"
        return json.dumps({"authentication": "Failed", "msg": "参数缺失"}).encode('utf8')
    
    # 校验登录状态:判断全局sessions中是否存在该用户的有效登录记录
    user_session = sessions.get(username)
    if not user_session:
        cherrypy.response.status = 401
        cherrypy.response.headers["Content-Type"] = "application/json"
        return json.dumps({"authentication": "Failed", "msg": "未登录或登录状态失效"}).encode('utf8')

    # 校验通过返回合法令牌
    res = {"authentication": "Ok", "token": str(uuid4())}
    cherrypy.response.headers["Content-Type"] = "application/json"
    return json.dumps(res).encode('utf8')
优化提示
  • 你当前的session存储逻辑存在缺陷:全局字典存储的session无过期机制,且登录失败分支执行sessions[username] = None时,若username为None会直接抛出异常,建议补充session过期逻辑,优先采用Cookie携带session标识的方案,比前端从sessionStorage读用户名传参的安全性更高。
  • 现有逻辑存在安全风险:用户密码明文存储、前端可任意伪造用户名传参绕过校验,建议后续对密码做加盐哈希处理,避免用户信息泄露。

内容的提问来源于stack exchange,提问作者dyxcvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 04:54:18