首页 > 解决方案 > 如何根据用户会话修复 jinja 模板中的登录和注销?

问题描述

我的登录系统在与数据库连接方面运行良好。account/logout但是,不知何故,一旦用户加载网站,我的 jinja 模板就会显示,而不是login/register. 但是当用户去account它去login。换句话说,它显示出相反的方向。

我做了以下条件:

{% if session['email'] == None %}
          <li class="nav-item">
            <a class="nav-link" href="{{url_for('login')}}">Login</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="{{url_for('register')}}">Register</a>
          </li>
          <!--WILL DISPLAY HOME/LOGIN/REGISTER WHEN LOGGED IN-->
          {% else %}
          <li class="nav-item">
            <a class="nav-link text-success" href="{{url_for('user')}}">Account</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="{{url_for('logout')}}">Logout</a>
          </li>
          {% endif %}

此外,我几乎可以肯定模板不是问题,而是我试图修复但没有成功的登录功能:

@app.route('/login', methods=['POST', 'GET'])
def login():
    if request.method == 'GET': 
        return render_template('login.html')
    else:
        user = mongo.db.user
        login_user = user.find_one({
        'email': request.form.get('email'), 
        'password':request.form.get('password'
        )})

        if login_user:
            session['email'] = login_user['email']
            session['name'] = login_user['name']
            return redirect(url_for('user'))

        return 'Invalid username or password combination'

标签: pythonmongodbflaskjinja2

解决方案


很可能电子邮件不是会话的属性,使得 session['email'] 未定义。

如果条件可以

{% if session['email'] is not defined or session['email']|length  == 0 %}

我宁愿让每个 demorgans 的 if 条件更积极

{% if session['email'] is defined and session['email']|length %}
// logout template 

未定义类型


推荐阅读