push
This commit is contained in:
0
app/auth/__init__.py
Normal file
0
app/auth/__init__.py
Normal file
48
app/auth/routes.py
Normal file
48
app/auth/routes.py
Normal file
@@ -0,0 +1,48 @@
|
||||
from datetime import datetime
|
||||
from flask import Blueprint, flash, make_response, redirect, render_template, request, url_for, session
|
||||
from flask_login import current_user, login_required, login_user, logout_user
|
||||
from app.forms.auth import LoginForm
|
||||
from app.extensions import db
|
||||
from app.models.user import User
|
||||
|
||||
bp = Blueprint('auth', __name__, url_prefix='/auth')
|
||||
|
||||
|
||||
@bp.route('/login', methods=['GET', 'POST'])
|
||||
def login():
|
||||
if current_user.is_authenticated:
|
||||
return redirect(url_for('dashboard.index'))
|
||||
form = LoginForm()
|
||||
response = None
|
||||
if form.validate_on_submit():
|
||||
user = User.query.filter_by(email=form.email.data.lower()).first()
|
||||
if user and user.check_password(form.password.data):
|
||||
if user.is_blocked:
|
||||
flash('Konto użytkownika jest zablokowane.', 'danger')
|
||||
else:
|
||||
login_user(user)
|
||||
user.last_login_at = datetime.utcnow()
|
||||
first_company = user.companies()[0] if user.companies() else None
|
||||
if first_company:
|
||||
session['current_company_id'] = first_company.id
|
||||
db.session.commit()
|
||||
flash('Zalogowano pomyślnie.', 'success')
|
||||
response = make_response(redirect(request.args.get('next') or url_for('dashboard.index')))
|
||||
response.set_cookie('theme', user.theme_preference or 'light', max_age=31536000, samesite='Lax')
|
||||
return response
|
||||
else:
|
||||
flash('Błędny login lub hasło.', 'danger')
|
||||
theme = request.cookies.get('theme', 'light')
|
||||
return render_template('auth/login.html', form=form, theme=theme)
|
||||
|
||||
|
||||
@bp.route('/logout')
|
||||
@login_required
|
||||
def logout():
|
||||
theme = current_user.theme_preference or request.cookies.get('theme', 'light')
|
||||
logout_user()
|
||||
session.pop('current_company_id', None)
|
||||
flash('Wylogowano.', 'info')
|
||||
response = make_response(redirect(url_for('auth.login')))
|
||||
response.set_cookie('theme', theme, max_age=31536000, samesite='Lax')
|
||||
return response
|
||||
Reference in New Issue
Block a user