Use token to remember login

This commit is contained in:
oldnapalm
2020-12-03 07:08:29 -03:00
committed by GitHub
parent c7cc12d7a1
commit 6ce8833748
2 changed files with 13 additions and 58 deletions

View File

@@ -22,16 +22,14 @@
<div class="row">
<div class="col-md-12 top-buffer">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="rememberlogin" name="rememberlogin">
<label class="form-check-label text-shadow" for="rememberlogin">
Remember login
</label>
<input class="form-check-input" type="checkbox" id="remember" name="remember">
<label class="form-check-label text-shadow" for="remember">Remember me</label>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12 top-buffer">
<input type="submit" value="Login" class="btn btn-sm btn-light" onclick="rememberLogin()">
<input type="submit" value="Login" class="btn btn-sm btn-light">
</div>
</div>
</form>
@@ -49,52 +47,3 @@
</div>
</div>
{% endblock %}
{% block scripts %}
<script>
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
var checkbox = document.getElementById('rememberlogin');
var username = document.getElementById('username');
var password = document.getElementById('password');
function rememberLogin() {
if(checkbox.checked && username.value !== '' && password.value !== '') {
setCookie('username', username.value, 365);
setCookie('password', password.value, 365);
}
else if(!checkbox.checked) {
setCookie('username', '', 0);
setCookie('password', '', 0);
}
}
var usernameVal = getCookie('username');
var passwordVal = getCookie('password');
if(usernameVal !== undefined && usernameVal !== null && usernameVal !== '' &&
passwordVal !== undefined && passwordVal !== null && passwordVal !== '') {
checkbox.checked = true;
username.value = usernameVal;
password.value = passwordVal;
}
</script>
{% endblock %}

View File

@@ -23,7 +23,7 @@ from logging.handlers import RotatingFileHandler
import jwt
from flask import Flask, request, jsonify, redirect, render_template, url_for, flash, session, abort, make_response, send_file, send_from_directory
from flask_login import UserMixin, AnonymousUserMixin, LoginManager, login_user, current_user, login_required
from flask_login import UserMixin, AnonymousUserMixin, LoginManager, login_user, current_user, login_required, logout_user
from gevent.pywsgi import WSGIServer
from google.protobuf.descriptor import FieldDescriptor
from protobuf_to_dict import protobuf_to_dict, TYPE_CALLABLE_MAP
@@ -359,6 +359,7 @@ def login():
if request.method == "POST":
username = request.form['username']
password = request.form['password']
remember = bool(request.form.get('remember'))
if not (username and password):
flash("Username and password cannot be empty.")
@@ -367,14 +368,17 @@ def login():
user = User.query.filter_by(username=username).first()
if user and check_password_hash(user.pass_hash, password):
login_user(user, remember=True)
login_user(user, remember=remember)
return redirect(url_for("user_home", username=username, enable_ghosts=bool(user.enable_ghosts), online=get_online()))
else:
flash("Invalid username or password.")
if current_user.is_authenticated:
return redirect(url_for("user_home", username=current_user.username, enable_ghosts=bool(current_user.enable_ghosts), online=get_online()))
user = User.verify_token(request.args.get('token'))
if user:
login_user(user, remember=True)
login_user(user, remember=False)
return redirect(url_for("reset", username=user.username))
return render_template("login_form.html")
@@ -575,7 +579,9 @@ def download():
@app.route("/logout/<username>")
@login_required
def logout(username):
logout_user()
flash("Successfully logged out.")
return redirect(url_for('login'))
@@ -1556,7 +1562,7 @@ def launch_zwift():
# Zwift client has switched to calling https://launcher.zwift.com/launcher/ride
if request.path != "/ride" and not os.path.exists(AUTOLAUNCH_FILE):
if MULTIPLAYER:
return render_template("login_form.html")
return redirect(url_for('login'))
else:
return render_template("user_home.html", username="", enable_ghosts=os.path.exists(ENABLEGHOSTS_FILE), online=get_online(),
is_admin=False, restarting=restarting, restarting_in_minutes=restarting_in_minutes)