概要
flaskを使用したWebアプリを作成しています。
以下の参考にさせて頂いたサイトのREADMEコピペほぼで実装できました。
本記事のコードはpassword照合のロジックを書く必要があります。
参考にさせて頂いたサイト
flask-loginの公式ドキュメント
https://flask-login.readthedocs.io/en/latest/
flask-loginの説明
Flask-Loginは、Flaskのユーザーセッション管理を提供します。ログイン、ログアウト、長期間のユーザーセッションの記憶といった一般的なタスクを処理します。
実装
$ pip install flask flask-login
import flask
import flask_login
login_manager = flask_login.LoginManager()
login_manager.init_app(app)
app = flask.Flask(__name__)
app.secret_key = 'super secret string' # Change this!
# Our mock database.
users = {'foo@bar.tld': {'password': 'secret'}}
class User(flask_login.UserMixin):
pass
@login_manager.user_loader
def user_loader(email):
if email not in users:
return
user = User()
user.id = email
return user
@login_manager.request_loader
def request_loader(request):
email = request.form.get('email')
if email not in users:
return
user = User()
user.id = email
# DO NOT ever store passwords in plaintext and always compare password
# hashes using constant-time comparison!
user.is_authenticated = request.form['password'] == users[email]['password']
return user
@app.route('/login', methods=['GET', 'POST'])
def login():
if flask.request.method == 'GET':
return '''
<form action='login' method='POST'>
<input type='text' name='email' id='email' placeholder='email'/>
<input type='password' name='password' id='password' placeholder='password'/>
<input type='submit' name='submit'/>
</form>
'''
email = flask.request.form['email']
if flask.request.form['password'] == users[email]['password']:
user = User()
user.id = email
flask_login.login_user(user)
return flask.redirect(flask.url_for('protected'))
return 'Bad login'
@app.route('/protected')
@flask_login.login_required
def protected():
return 'Logged in as: ' + flask_login.current_user.id
@app.route('/logout')
def logout():
flask_login.logout_user()
return 'Logged out'
@login_manager.unauthorized_handler
def unauthorized_handler():
return 'Unauthorized'
if __name__ == '__main__':
app.run(host="0.0.0.0",port=8000,debug=True)
テスト
以下を元に実装してみるとよいかもしれません。
https://github.com/maxcountryman/flask-login/blob/master/test_login.py