$ pip install flask
$ pip install flask-login$ python app.py$ curl localhost:5000/protected -H 'Authorization: [email protected]:secret'$ pip install flask
$ pip install flask-login$ python app.py$ curl localhost:5000/protected -H 'Authorization: [email protected]:secret'| ''' | |
| A very simple demonstration of Flask-Login. | |
| ''' | |
| import flask | |
| import flask.ext.login as flask_login | |
| # Flask application object. | |
| app = flask.Flask(__name__) | |
| # Mock database. | |
| db = {'[email protected]': ('Foo Bar', 'secret')} | |
| # Flask Login specifics. | |
| login_manager = flask_login.LoginManager() | |
| login_manager.init_app(app) | |
| class User(flask_login.UserMixin): | |
| def __init__(self, username, password): | |
| self.id = username | |
| self.password = password | |
| @classmethod | |
| def get(cls, email): | |
| return cls(*db.get(email)) | |
| @login_manager.request_loader | |
| def request_loader(request): | |
| token = request.headers.get('Authorization') | |
| if token is None: | |
| return | |
| email, password = token.split(':') | |
| user = User.get(email) | |
| if user.password == password: # N.B. timing attack possible! | |
| return user | |
| # Views. | |
| @app.route('/') | |
| def public(): | |
| return flask.jsonify({'okay': True}) | |
| @app.route('/protected') | |
| @flask_login.login_required | |
| def protected(): | |
| return flask.jsonify({'name': flask_login.current_user.id}) | |
| if __name__ == '__main__': | |
| app.config['SECRET_KEY'] = 'hunter2' | |
| app.run(debug=True) |