delete tokens after logout
This commit is contained in:
parent
252ed8ab9b
commit
41ea9b0ed3
2 changed files with 27 additions and 18 deletions
|
@ -12,6 +12,7 @@ class Users(db.Model):
|
||||||
username_lower = db.Column(db.String(64), unique=True)
|
username_lower = db.Column(db.String(64), unique=True)
|
||||||
email = db.Column(db.String(64), unique=True)
|
email = db.Column(db.String(64), unique=True)
|
||||||
password = db.Column(db.String(128))
|
password = db.Column(db.String(128))
|
||||||
|
admin = db.Column(db.Boolean)
|
||||||
utype = db.Column(db.Integer)
|
utype = db.Column(db.Integer)
|
||||||
|
|
||||||
def __init__(self, name, username, email, password, utype=1):
|
def __init__(self, name, username, email, password, utype=1):
|
||||||
|
@ -21,6 +22,7 @@ class Users(db.Model):
|
||||||
self.email = email.lower()
|
self.email = email.lower()
|
||||||
self.password = utils.hash_password(password)
|
self.password = utils.hash_password(password)
|
||||||
self.utype = utype
|
self.utype = utype
|
||||||
|
self.admin = False
|
||||||
|
|
||||||
class Teams(db.Model):
|
class Teams(db.Model):
|
||||||
tid = db.Column(db.Integer, primary_key=True)
|
tid = db.Column(db.Integer, primary_key=True)
|
||||||
|
|
|
@ -38,17 +38,20 @@ def user_register():
|
||||||
db.session.add(user)
|
db.session.add(user)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
logger.log("registrations", logger.INFO, "%s registered with %s" % (name.encode("utf-8"), email.encode("utf-8")))
|
logger.log("registrations", logger.INFO, "%s registered with %s" % (name.encode("utf-8"), email.encode("utf-8")))
|
||||||
login_user(username, password)
|
login_user(username, password)
|
||||||
|
|
||||||
return { "success": 1, "message": "Success!" }
|
return { "success": 1, "message": "Success!" }
|
||||||
|
|
||||||
@blueprint.route("/logout", methods=["GET", "POST"])
|
@blueprint.route("/logout", methods=["GET", "POST"])
|
||||||
@api_wrapper
|
@api_wrapper
|
||||||
def user_logout():
|
def user_logout():
|
||||||
sid = session["sid"]
|
sid = session["sid"]
|
||||||
username = session["username"]
|
username = session["username"]
|
||||||
LoginTokens.query.filter_by(sid=sid, username=username).delete()
|
with app.app_context():
|
||||||
|
expired = LoginTokens.query.filter_by(username=username).all()
|
||||||
|
for expired_token in expired: db.session.delete(expired_token)
|
||||||
|
db.session.commit()
|
||||||
session.clear()
|
session.clear()
|
||||||
|
|
||||||
@blueprint.route("/login", methods=["POST"])
|
@blueprint.route("/login", methods=["POST"])
|
||||||
|
@ -111,18 +114,18 @@ UserSchema = Schema({
|
||||||
}, extra=True)
|
}, extra=True)
|
||||||
|
|
||||||
def get_user(username=None, username_lower=None, email=None, uid=None):
|
def get_user(username=None, username_lower=None, email=None, uid=None):
|
||||||
|
match = {}
|
||||||
|
if username != None:
|
||||||
|
match.update({ "username": username })
|
||||||
|
elif username_lower != None:
|
||||||
|
match.update({ "username_lower": username_lower })
|
||||||
|
elif uid != None:
|
||||||
|
match.update({ "uid": uid })
|
||||||
|
elif email != None:
|
||||||
|
match.update({ "email": email })
|
||||||
|
# elif api.auth.is_logged_in():
|
||||||
|
# match.update({ "uid": api.auth.get_uid() })
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
match = {}
|
|
||||||
if username != None:
|
|
||||||
match.update({ "username": username })
|
|
||||||
elif username_lower != None:
|
|
||||||
match.update({ "username_lower": username_lower })
|
|
||||||
elif uid != None:
|
|
||||||
match.update({ "uid": uid })
|
|
||||||
elif email != None:
|
|
||||||
match.update({ "email": email })
|
|
||||||
# elif api.auth.is_logged_in():
|
|
||||||
# match.update({ "uid": api.auth.get_uid() })
|
|
||||||
result = Users.query.filter_by(**match)
|
result = Users.query.filter_by(**match)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
@ -134,16 +137,20 @@ def login_user(username, password):
|
||||||
|
|
||||||
useragent = request.headers.get("User-Agent")
|
useragent = request.headers.get("User-Agent")
|
||||||
ip = request.remote_addr
|
ip = request.remote_addr
|
||||||
token = LoginTokens(user.uid, user.username, ua=useragent, ip=ip)
|
|
||||||
with app.app_context():
|
with app.app_context():
|
||||||
|
expired = LoginTokens.query.filter_by(username=username).all()
|
||||||
|
for expired_token in expired: db.session.delete(expired_token)
|
||||||
|
|
||||||
|
token = LoginTokens(user.uid, user.username, ua=useragent, ip=ip)
|
||||||
db.session.add(token)
|
db.session.add(token)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
session["sid"] = token.sid
|
session["sid"] = token.sid
|
||||||
session["username"] = token.username
|
session["username"] = token.username
|
||||||
session["admin"] = user.utype == 0
|
session["admin"] = user.utype == 0
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def is_logged_in():
|
def is_logged_in():
|
||||||
sid = session["sid"]
|
sid = session["sid"]
|
||||||
|
|
Loading…
Add table
Reference in a new issue