Flask-login+SQLAlchemy use token for login system couldn't read token -
i want use flask-login(use token)+sqlalchemy build login system. read flask-login offical document , similar article(http://blog.thecircuitnerd.com/flask-login-tokens/) , build login system.
when run run.py, login use user in database, can read user.id via page. when add code program, found token not work! because never see text "<<<<<<<<<<<<<<<----------get token-------------<<<<<<<<<<<<<<<<<<<<<" , "<<<<<<<<<<<<<<<----------load token-------------<<<<<<<<<<<<<<<<<<<<<", add procedure get_token , load_token.
is there wrong in code?
##################################models.py###################### class user(base,usermixin): __tablename__ = 'users' id = column(integer, sequence('seq_user_id'), primary_key=true) name = column(string(50), unique=true, index = true, nullable = false) email = column(string(120), unique=true, index = true, nullable = false) password = column(string(128), nullable = false) active = column(boolean, default=false) registerdate = column(date, nullable = false) lastlogin = column(datetime) def __init__(self, name, email, password, active, registerdate=none, lastlogin=none): self.name = name self.email = email self.password = password self.active = active self.registerdate = datetime.datetime.now() self.lastlogin = lastlogin def __repr__(self): return '<user %r>' % (self.name) def is_authenticated(self): return true def is_active(self): return true def is_anonymous(self): return false def get_id(self): return unicode(self.id) def get_auth_token(self): print '<<<<<<<<<<<<<<<----------get token-------------<<<<<<<<<<<<<<<<<<<<<' data = [str(self.id), self.password] return login_serializer.dumps(data) @staticmethod def get_by_id(userid): result = user.query.filter(user.id==userid).first() if result: return result else: return none @staticmethod def get_by_name(username,password): result = user.query.filter(user.name==username).filter(user.password==md5(password).hexdigest()).first() if result: return result else: return none #####################################forms.py########################### class loginform(form): username = textfield('username', validators = [length(min=4, max=30), required()]) password = passwordfield('password', validators = [required()]) remember_me = booleanfield('remember_me', default = false) ####################################frontend.py ############################ @app.route('/') def index(name=none): #show property of user object test print '['+str(current_user.is_authenticated())+']['+str(current_user.is_active())+']['+str(current_user.is_anonymous())+']' if not current_user.is_anonymous(): print '[[[[[[[[[['+str(current_user.id)+']]]]]]]]]]]' else: print '[[[[[[[[[[[[anonymous]]]]]]]]]]]]' return render_template('index.html', name=name) @app.route('/signout') @login_required def signout(): logout_user() return redirect(url_for('index')) @app.route('/signin', methods=['get', 'post']) def signin(): form = loginform() if form.validate_on_submit(): user = user.get_by_name(form.username.data,form.password.data) if user: login_user(user, remember=form.remember_me.data) return redirect(url_for('index')) else: return render_template('signin.html', form = form) else: return render_template('signin.html', form = form) @login_manager.token_loader def load_token(token): max_age = app.config["remember_cookie_duration"].total_seconds() print "<<<<<<<<<<<<<<<<<--------------token load-----------<<<<<<<<<<<<<<<<<<<" data = login_serializer.loads(token, max_age=max_age) user = user.get_by_id(data[0]) if user , data[1] == user.password: return user return none @login_manager.user_loader def load_user(userid): print '<<<<<<<<<<<<<<<userload<<<<<<<<<<<<<<<<<<<<<' return user.get_by_id(userid)
Comments
Post a Comment