Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import eventlet
- eventlet.monkey_patch()
- # http://gouthamanbalaraman.com/blog/minimal-flask-login-example.html
- from flask_login import UserMixin, LoginManager
- from flask_bootstrap import Bootstrap
- socketio = SocketIO(asyncmode="eventlet")
- login_manager = LoginManager()
- app = Flask(__name__)
- app.debug = debug
- app.url_map.strict_slashes = False
- app.config['SECRET_KEY'] = 'secret'
- class User(UserMixin):
- user_database = {"Admin": ("Admin", 'SSAdmin')}
- def __init__(self, username, password):
- self.id = username
- self.password = password
- @classmethod
- def get(cls, id):
- return cls.user_database.get(id)
- @login_manager.request_loader
- def load_user(request):
- token = request.headers.get('Authorization')
- if token is None:
- token = request.args.get('token')
- if token is not None:
- username, password = token.split(":") # naive token
- user_entry = User.get(username)
- if user_entry is not None:
- user = User(user_entry[0], user_entry[1])
- if user.password == password:
- return user
- return None
- socketio.init_app(app)
- login_manager.init_app(app)
- bootstrap = Bootstrap(app)
- from flask import request, render_template, redirect, url_for
- from flask_login import login_required
- from flask_wtf import FlaskForm
- from wtforms import StringField, PasswordField, BooleanField
- from wtforms.validators import InputRequired
- from app.project import User
- from . import admin_blueprint
- class LoginForm(FlaskForm):
- username = StringField('username', validators=[InputRequired()])
- password = PasswordField('password', validators=[InputRequired()])
- remember = BooleanField('Remember Me')
- @admin_blueprint.route('/', methods=["GET", "POST"])
- # @login_required
- def index():
- # if request.method == "GET":
- form = LoginForm()
- if form.validate_on_submit():
- user = User.get(id=form.username.data)
- print(user)
- if user:
- if user[1] == form.password.data:
- return redirect(url_for('admin.download'))
- return render_template('admin/login.html', form=form)
- @admin_blueprint.route('/download', methods=["GET", "POST"])
- @login_required
- def download():
- return "<h1>Welcome, Admin</h1>"
- {% extends "bootstrap/base.html" %}
- {% import "bootstrap/wtf.html" as wtf %}
- {% block title %}
- Login
- {% endblock %}
- {% block styles %}
- {{ super() }}
- <link rel="stylesheet" href="{{ url_for('admin.static', filename='styles/signin.css') }}">
- {% endblock %}
- {% block content %}
- <div class="container">
- <div class="row">
- <div class="col-md-8 col-md-offset-2">
- <form class="sign-in" method="POST" action="{{ url_for('admin.download') }}">
- <h2 class="form-signin-heading">Please sign in</h2>
- {{ form.hidden_tag() }}
- {{ wtf.form_field(form.username) }}
- {{ wtf.form_field(form.password) }}
- {{ wtf.form_field(form.remember) }}
- <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
- </form>
- </div>
- </div>
- </div>
- {% endblock %}
Add Comment
Please, Sign In to add comment