[Flask] Stuck with @login_required which breaks our app
Stefan Knecht
knecht.stefan at gmail.com
Tue Mar 1 05:11:41 EST 2022
Thank you David, you led me down the right path! On that discord you
recommended was a super helpful user who identified the problem:
from app import login_manager
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "home_blueprint.login"
Commented out that second line that overwrites login_manager, and voila, it
started working. Stared at that code way too long and still can't believe I
didn't see that all this time.
Oh well.
Thanks, really appreciate it!
On Fri, Feb 25, 2022 at 4:51 PM David Nieder <davidnieder at gmx.de> wrote:
> Hello Stefan,
>
> I took your code and put together a minimal example but I could not
> reproduce your error: the redirect always happens for me.
> Looking at the code of Flask-Login, it seems to me that the only time
> 401 is returned is if login_view is not set. Maybe look at that
> again? But with your other dependencies there could be more going on.
>
> So the only tip I can give is: check if Flask-Login works with a
> stripped-down version of your code and add components back in.
> Here is what I used:
>
> from flask import Flask, request
> from flask_login import LoginManager, login_required, current_user,
> UserMixin
>
> app = Flask(__name__)
> app.secret_key = '123456'
>
> login_manager = LoginManager()
> login_manager.init_app(app)
> login_manager.login_view = 'login'
>
>
> @login_manager.user_loader
> def load_user(user_id):
> return UserMixin
>
> @app.route('/index')
> def index():
> return 'the index page'
>
> @app.route('/contents')
> @login_required
> def contents():
> return 'the content page'
>
> @app.route('/login', methods=['GET', 'POST'])
> def login():
> if not current_user.is_authenticated:
> return 'current_user not authenticated'
> return 'current_user authenticated'
>
>
>
> Good luck
> David
>
> P.S. there is flask community on discord which is a lot more active than
> this list. Maybe you can find more help there.
> https://discord.gg/pallets
>
>
>
> On 24.02.22 09:49, Stefan Knecht wrote:
> > Hello all
> >
> > I'm hoping to end a week-long struggle by reaching out here.
> >
> > We've been evaluating and testing building flask apps to give our vast
> > python command line tool arsenal a face lift.
> >
> > I've got the basics working with coreUI for templates and flask doing
> the
> > core functionality. Or well, so it should.
> >
> > I've been following tutorials and the documentation, and as far as I can
> > tell, we're doing everything correctly - yet it doesn't work anymore, as
> > soon as I make use of @login_required.
> >
> > This is our routes.py:
> >
> > from app.home import blueprint
> > from app.base.forms import LoginForm, CreateAccountForm
> >
> > from flask import Flask, current_app, render_template, redirect,
> url_for,
> > request, jsonify, session
> > from flask_login import LoginManager, login_required, current_user,
> > login_user, logout_user
> >
> > from app import login_manager
> > from app.base.models import User
> >
> > app = Flask(__name__)
> >
> > login_manager = LoginManager()
> > login_manager.init_app(app)
> > login_manager.login_view = 'home_blueprint.login'
> >
> >
> > @login_manager.user_loader
> > def load_user(user_id):
> > print(f"User loader {user_id}")
> > return User.get(user_id)
> >
> > @blueprint.route('/index')
> > def index():
> > print("Index")
> > return render_template('index.html')
> >
> > @blueprint.route('/contents')
> > @login_required
> > def contents():
> > print("Contents")
> > return ('hello', 200)
> >
> >
> > @blueprint.route('/login', methods=['GET', 'POST'])
> > def login():
> >
> > print(f"HEADER {request.headers}")
> >
> > login_form = LoginForm(request.form)
> > if 'login' in request.form:
> >
> > # read form data
> > username = request.form['username']
> > password = request.form['password']
> >
> >
> > if not current_user.is_authenticated:
> > return render_template( 'accounts/login.html', form=login_form)
> > return redirect(url_for('home_blueprint.index'))
> >
> > If I remove @login_required from the /contents route, everything works
> > fine. As soon as I add it there (or anywhere else for that matter) we
> get
> > nothing but 401 Unauthorized.
> >
> > This is what we use:
> >
> > $ pip3 list | grep -i flask
> > Flask 1.1.1
> > Flask-Bootstrap 3.3.7.1
> > Flask-Ext 0.1
> > flask-ldap-login 0.3.0
> > flask-ldap3-login 0.9.16
> > Flask-Login 0.5.0
> > Flask-Migrate 2.5.3
> > flask-nav 0.6
> > Flask-Session 0.3.2
> > Flask-SimpleLDAP 1.4.0
> > Flask-SQLAlchemy 2.4.4
> > Flask-WTF 0.14.3
> >
> > Any hint would be greatly appreciated. The head hurts, the wall's
> already
> > got a big hole in it.
> >
> >
> > Stefan
> >
> >
> > _______________________________________________
> > Flask mailing list
> > Flask at python.org
> > https://mail.python.org/mailman/listinfo/flask
> _______________________________________________
> Flask mailing list
> Flask at python.org
> https://mail.python.org/mailman/listinfo/flask
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.python.org/pipermail/flask/attachments/20220301/de65b841/attachment.html>
More information about the Flask
mailing list