Decouple the db user from the flask login user.
This commit is contained in:
parent
995ad8b679
commit
cc58b970d6
2 changed files with 21 additions and 18 deletions
27
app.py
27
app.py
|
@ -1,9 +1,9 @@
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from flask import (Flask, make_response, request, abort, render_template,
|
from flask import (Flask, make_response, request, abort, send_file,
|
||||||
redirect, url_for)
|
redirect, url_for)
|
||||||
from flask.ext.principal import Principal
|
from flask.ext.principal import Principal
|
||||||
from flask.ext.login import login_user, LoginManager
|
from flask.ext.login import login_user, LoginManager, UserMixin
|
||||||
|
|
||||||
import model
|
import model
|
||||||
|
|
||||||
|
@ -19,14 +19,29 @@ login_manager.init_app(app)
|
||||||
login_manager.login_view = 'signin'
|
login_manager.login_view = 'signin'
|
||||||
|
|
||||||
|
|
||||||
|
class _LoginWrappedDBUser(UserMixin):
|
||||||
|
def __init__(self, db_user):
|
||||||
|
self._db_user = db_user
|
||||||
|
|
||||||
|
def is_active(self):
|
||||||
|
return self._db_user.verified
|
||||||
|
|
||||||
|
def get_id(self):
|
||||||
|
return unicode(self._db_user.username)
|
||||||
|
|
||||||
|
|
||||||
@login_manager.user_loader
|
@login_manager.user_loader
|
||||||
def load_user(username):
|
def load_user(username):
|
||||||
return model.get_user(username)
|
db_user = model.get_user(username)
|
||||||
|
if db_user:
|
||||||
|
return _LoginWrappedDBUser(db_user)
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
@app.route('/', methods=['GET'])
|
@app.route('/', methods=['GET'])
|
||||||
def index():
|
def index():
|
||||||
return render_template('index.html')
|
return send_file('templates/index.html')
|
||||||
|
|
||||||
|
|
||||||
@app.route('/signin', methods=['POST'])
|
@app.route('/signin', methods=['POST'])
|
||||||
|
@ -39,7 +54,7 @@ def signin():
|
||||||
if verified:
|
if verified:
|
||||||
logger.debug('Successfully signed in as: %s' % username)
|
logger.debug('Successfully signed in as: %s' % username)
|
||||||
|
|
||||||
login_user(verified)
|
login_user(_LoginWrappedDBUser(verified))
|
||||||
return redirect(request.args.get('next') or url_for('index'))
|
return redirect(request.args.get('next') or url_for('index'))
|
||||||
|
|
||||||
abort(403)
|
abort(403)
|
||||||
|
@ -47,7 +62,7 @@ def signin():
|
||||||
|
|
||||||
@app.route('/signin', methods=['GET'])
|
@app.route('/signin', methods=['GET'])
|
||||||
def render_signin_page():
|
def render_signin_page():
|
||||||
return render_template('signin.html')
|
return send_file('templates/signin.html')
|
||||||
|
|
||||||
|
|
||||||
@app.route('/_ping')
|
@app.route('/_ping')
|
||||||
|
|
12
database.py
12
database.py
|
@ -20,18 +20,6 @@ class User(BaseModel):
|
||||||
email = CharField(unique=True)
|
email = CharField(unique=True)
|
||||||
verified = BooleanField(default=False)
|
verified = BooleanField(default=False)
|
||||||
|
|
||||||
def is_active(self):
|
|
||||||
return self.verified
|
|
||||||
|
|
||||||
def is_authenticated(self):
|
|
||||||
return True
|
|
||||||
|
|
||||||
def is_anonymous(self):
|
|
||||||
return False
|
|
||||||
|
|
||||||
def get_id(self):
|
|
||||||
return unicode(self.username)
|
|
||||||
|
|
||||||
|
|
||||||
class Visibility(BaseModel):
|
class Visibility(BaseModel):
|
||||||
name = CharField()
|
name = CharField()
|
||||||
|
|
Reference in a new issue