[Flask] Unable to set current_user.authenticated to True

Abdul Mohammed imonikemohammed at gmail.com
Mon Jul 1 11:14:33 EDT 2019


Hello everyone,
                  I am trying to toggle between "Sign in" and "Sign out"
links using the current_user.is_authenticated variable such that when it
returns False, the "Sign in" is displayed and when True the "Sign out" link
is displayed. At some point in the login code I set
current_user.authenticated = True. The thing is that by the I am
successfully logged in and presented with the next view, it is the "Sign
in" link that is still displayed. When I check
current_user.is_authenticated, it returns False, even though I had
explicitly set it to True. Please can anyone point out what I am might be
doing wrong? Here is my code:

I have a base.html file that contains the "Sign in" and "Sign out" links
that is extended by the other templates:

<ul class="nav navbar-nav navbar-right">
   {% if (current_user.is_authenticated) %}
   <li><a href="{{ url_for('logout') }}">Sign Out</a></li>
   {% else %}
   <li><a href="{{ url_for('index') }}">Sign In</a></li>
   {% endif %}
</ul>

<body>
{% block page_content %}{% endblock %}
</body>


 When the app first loads in the browser it displays a login form,
login.html:

 {% extends "base.html" %}

{% block content %}
    {% import "bootstrap/wtf.html" as wtf %}
    {% block title %}Flasky - Login{% endblock %}
    {% block page_content %}
    <div class="page-header">
        <h1>Login</h1>
    </div>
    <div class="col-md-4">
        {{ wtf.quick_form(form) }}
    </div>
    {% endblock %}
{% endblock %}

When a user logs in, it loads a template dashboard.html that displays a
map. The top part looks like this:

{% extends "base.html" %}

{% block page_content %}
<html>
 <head>
   <title>Lagos Map</title>
   <link rel="stylesheet" href="
https://unpkg.com/leaflet@1.1.0/dist/leaflet.css"

integrity="sha512-wcw6ts8Anuw10Mzh9Ytw4pylW8+NAD4ch3lqm9lzAsTxg0GFeJgoAtxuCLREZSC5lUXdVyo/7yfsqFjQ4S+aKw=="
   crossorigin=""/>
   <script src="https://unpkg.com/leaflet@1.1.0/dist/leaflet.js"

integrity="sha512-mNqn2Wg7tSToJhvHcqfzLMU6J4mkOImSPTxVZAdo+lcPlk+GhZmYgACEe0x35K7YzW1zJ7XyJV/TT1MrdXvMcA=="
   crossorigin=""></script>
   <script src="
https://rawgit.com/k4r573n/leaflet-control-osm-geocoder/master/Control.OSMGeocoder.js
"></script>
   <link rel="stylesheet" href="
https://rawgit.com/k4r573n/leaflet-control-osm-geocoder/master/Control.OSMGeocoder.css"
/>
   <link rel="stylesheet" href="
https://cdnjs.cloudflare.com/ajax/libs/leaflet-routing-machine/3.2.5/leaflet-routing-machine.css"
/>
   <script src="
https://cdnjs.cloudflare.com/ajax/libs/leaflet-routing-machine/3.2.5/leaflet-routing-machine.js
"></script>
   <script src="
https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script>
  ...
  ...

And these are the relevant routes:

@app.route('/',methods=['GET','POST'])
def index():
      form = LoginForm()
      if form.validate_on_submit():
          user = User.query.filter_by(email=form.email.data).first()
          if user is not None and user.check_password(form.password.data):
              user.authenticated = True
              current_user = user
              db.session.add(current_user)
              db.session.commit()
              login_user(current_user, form.remember_me.data)
              return redirect(request.args.get('next') or
url_for('dashboard'))
          flash('Invalid username or password.')
       return render_template('auth/login.html', form=form)

@app.route('/dashboard')
def dashboard():
      return render_template("dashboard.html")

Thank you for your time.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/flask/attachments/20190701/9674ee57/attachment.html>


More information about the Flask mailing list