python - Flask-Login opens login-required pages for Anonymous Users -


in flask app, want redirect users logged in members area when open login page. using flask-login extension.

now issue anonymous users can open member page without having log in though has login-required decorator. when checked terminal error on members page opened anonymous user:

error on request: traceback (most recent call last):   file "/home/maxwell/py/aqua/lib/python2.7/site-packages/werkzeug/serving.py", line 209, in run_wsgi     execute(self.server.app)   file "/home/maxwell/py/aqua/lib/python2.7/site-packages/werkzeug/serving.py", line 200, in execute     write(data)   file "/home/maxwell/py/aqua/lib/python2.7/site-packages/werkzeug/serving.py", line 168, in write     self.send_header(key, value)   file "/usr/lib/python2.7/basehttpserver.py", line 412, in send_header     self.wfile.write("%s: %s\r\n" % (keyword, value)) ioerror: [errno 32] broken pipe 

this flask code. pasting bits think necessary:

import os  flask import flask, render_template, redirect, flash, request, url_for flask_login import loginmanager, login_user, logout_user, login_required, current_user flask_bcrypt import bcrypt flask_debugtoolbar import debugtoolbarextension flask_sqlalchemy import sqlalchemy sqlalchemy.exc import integrityerror forms import loginform, registerform flask_bootstrap import bootstrap datetime import timedelta   ############## ### config ### ##############  app = flask(__name__) app.config.from_object('config') db = sqlalchemy(app)  models import user, pvalue, history, anonymous  ############## # extensions # ##############  login_manager = loginmanager() login_manager.init_app(app) bcrypt = bcrypt(app) toolbar = debugtoolbarextension(app) bootstrap = bootstrap(app)  ################## ####flask-login### ##################  login_manager.login_view = "login" login_manager.login_message_category = 'danger' login_manager.anonymous_user = anonymous  @login_manager.user_loader def load_user(user_id):     return user.query.filter(user.id == user_id).first()  @app.route('/', methods = ['get','post']) def login():     if current_user.is_authenticated():         return redirect(url_for('dashboard'))     form = loginform(request.form)     if request.method == 'post':         print("first if")         if form.validate_on_submit():             print("second if")             user1 = user.query.filter_by(username = form.username.data).first()             if user1 , bcrypt.check_password_hash(user1.password, request.form['password']):                 login_user(user1)                 flash('you logged in. welcome!','success')                 return redirect(url_for('dashboard'))             else:                 flash('invalid username and/or password.','danger')                 return render_template('login.html', title = "please login", form = form)     else:         return render_template('login.html', form=form) 

i using current_user.is_authenticated() check if user logged in.

now set login view 'login' default when anonymous user enters route login-required decorator supposed go login route not happen.

and models.py containing anonymoususermixin object necessary return values anonymous user:

from views import db import datetime flask_login import usermixin, anonymoususermixin  class user(db.model, usermixin):      __tablename__ = 'users'     id = db.column(db.integer, primary_key=true)     username = db.column(db.string, nullable = false)     password = db.column(db.string, nullable = false)      def __init__(self, username = none, password = none):         self.username = username         self.password = password      def is_authenticated(self):         return true      def is_active(self):         return true      def is_anonymous(self):         return false      def get_id(self):         return self.id  class anonymous(anonymoususermixin):     def __init__(self):          print "exec"      def is_authenticated(self):         return false      def is_active(self):         return false      def is_anonymous(self):         return true      def get_id(self):         return none 

i not able figure out why broken pipe error keeps occurring. installed library or there mistake in code?

i solved removing other methods anonymous class. anonymous class has username assigned guest.

class anonymous(anonymoususermixin):     def __init__(self):         self.username = 'guest' 

then check if user logged in put

if current_user not 'guest':         return redirect(url_for('dashboard')) 

but still don't know why earlier is_authenticated method did not work.


Comments

Popular posts from this blog

javascript - Clear button on addentry page doesn't work -

c# - Selenium Authentication Popup preventing driver close or quit -

tensorflow when input_data MNIST_data , zlib.error: Error -3 while decompressing: invalid block type -