2301_79095830 2024-12-16 01:27 采纳率: 0%
浏览 45
已结题

Flesk顾客界面沿用登陆界面的username失败的解决方案

操作环境:VSCode配置的虚拟环境,含pymssql,Flesk.
问题描述:目前存在两个界面(Login和Customer),Login是用户登陆界面,包含用户名 ,密码和身份。经过SQL验证后,已实现用户登陆操作。但是,进入Customer界面,想要完成查询用户信息的操作失败。
思路:我试图沿用登陆界面的用户名username)。即登陆界面存储session['username']=username。在顾客界面获取username=session.get('username')。但是,使用改操作失败,以username为切入点进行查询的操作失败,系统反馈返回的用户名为空,不可获取用户信息。然而,只要把username固定为'customer1'(写死用户名),就可以得到用户信息。
期望:不要固定'username' ,要灵活,后续会有不同的用户登陆,查询不同用户的信息,要如何解决这一问题?

  • 写回答

36条回答 默认 最新

  • 羊城迷鹿 新星创作者: 人工智能技术领域 2024-12-16 17:10
    关注
    获得0.15元问题酬金

    应该是session的逻辑写错了,如果改不出来,可以考虑使用本地文件或者是系统环境变量来存,下面是示例:

    好的,我来为您提供一种使用本地文件或环境变量保存用户名的示例代码。这个方法可以让您的应用程序更加灵活和安全。

    首先,您可以选择使用本地文件保存用户名。这里我们假设用户名保存在一个名为 user_credentials.txt 的文件中:

    import os
    
    # 登录视图函数
    @app.route('/login', methods=['POST'])
    def login():
        username = request.form['username']
        password = request.form['password']
        
        # 验证用户名和密码是否正确
        if is_valid_user(username, password):
            save_username(username)
            return redirect(url_for('customer'))
        else:
            return render_template('login.html', error='Invalid username or password')
    
    # 保存用户名到文件
    def save_username(username):
        with open('user_credentials.txt', 'w') as f:
            f.write(username)
    
    # 从文件中读取用户名
    def get_username():
        try:
            with open('user_credentials.txt', 'r') as f:
                return f.read().strip()
        except FileNotFoundError:
            return None
    
    # 客户视图函数
    @app.route('/customer')
    def customer():
        username = get_username()
        if username:
            # 使用 username 查询用户信息
            user_info = get_user_info(username)
            return render_template('customer.html', user_info=user_info)
        else:
            return redirect(url_for('login'))
    

    另一种方式是使用环境变量保存用户名。这种方式更加安全,因为环境变量不会被检查到代码中:

    import os
    
    # 登录视图函数
    @app.route('/login', methods=['POST'])
    def login():
        username = request.form['username']
        password = request.form['password']
        
        # 验证用户名和密码是否正确
        if is_valid_user(username, password):
            save_username(username)
            return redirect(url_for('customer'))
        else:
            return render_template('login.html', error='Invalid username or password')
    
    # 保存用户名到环境变量
    def save_username(username):
        os.environ['CURRENT_USER'] = username
    
    # 从环境变量中读取用户名
    def get_username():
        return os.getenv('CURRENT_USER')
    
    # 客户视图函数
    @app.route('/customer')
    def customer():
        username = get_username()
        if username:
            # 使用 username 查询用户信息
            user_info = get_user_info(username)
            return render_template('customer.html', user_info=user_info)
        else:
            return redirect(url_for('login'))
    

    无论您选择使用本地文件还是环境变量,在这两种方式中,登录成功后您都会将用户名保存下来,在进入客户界面时从保存的位置读取用户名,并使用该用户名查询用户信息。

    这种方式可以让您的应用程序更加灵活和安全,因为用户名不会直接存储在 Flask 的 session 中,而是存储在本地文件或环境变量中。如果您有任何其他问题,欢迎继续与我交流。

    评论

报告相同问题?

问题事件

  • 系统已结题 12月24日
  • 创建了问题 12月16日