Initial Login functionality

This commit is contained in:
Josako
2024-04-24 11:58:45 +02:00
parent ca77f55a7f
commit c9b9828e7b
1101 changed files with 331963 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,10 @@
from flask_wtf import FlaskForm
from wtforms import PasswordField, SubmitField, EmailField, BooleanField
from wtforms.validators import DataRequired, Length, Email
class LoginForm(FlaskForm):
email = EmailField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired(), Length(min=8)])
# remember_me = BooleanField('Remember me')
submit = SubmitField('Login')

View File

@@ -0,0 +1,47 @@
from datetime import datetime as dt, timezone as tz
from flask import request, redirect, url_for, flash, render_template, Blueprint, jsonify
from ..models.user import User, Tenant
from ..extensions import db, bcrypt
from .auth_forms import LoginForm
from flask_jwt_extended import (create_access_token, create_refresh_token, set_access_cookies, set_refresh_cookies,
unset_jwt_cookies)
auth_bp = Blueprint('auth_bp', __name__)
@auth_bp.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
email = request.form.get('email')
password = request.form.get('password')
remember_me = True if request.form.get('remember_me') else False
user = User.query.filter_by(email=email).first()
if user:
if bcrypt.check_password_hash(user.password, password):
response = jsonify({'msg': 'Login Successful'})
flash('Logged in successfully!', category='success')
access_token = create_access_token(
identity=user.id,
additional_claims={'tenant': user.tenant_id})
refresh_token = create_refresh_token(
identity=user.id,
additional_claims={'tenant': user.tenant_id})
set_access_cookies(response, access_token)
set_refresh_cookies(response, refresh_token)
return redirect(url_for('user_bp.user'))
else:
flash('Incorrect password, try again.', category='error')
else:
flash('Email does not exist.', category='error')
form = LoginForm()
return render_template('login.html', form=form)
@auth_bp.route('/logout', methods=['POST'])
def logout():
response = jsonify({'msg': 'Logout Successful'})
unset_jwt_cookies(response)
return redirect(url_for('/'))