KZKY memo

自分用メモ.

Flask-Auth 基本

Pluginの列挙

  • DIY
  • Flask-Login
  • Flask-Auth
  • FlaskSecurity

Flask-Login

https://blog.openshift.com/use-flask-login-to-add-user-authentication-to-your-python-application/

機能

  • User session management: login, logout, "remember me"
  • Independent from database selction
  • Do not restrict to using username/passwd, openid or other authentication can be used.

コード

git clone https://github.com/shekhargulati/flask-login-openshift-quickstart.git

todoapp.cfgを少し弄くれば使える.

基本的使い方

基本はsqlalchemyをベースにユーザクラスを作る
  • is_authenticated() , is_active(), is_anonymous() , and get_id()のメソッドは必要
class User(db.Model):
    __tablename__ = "users"
    id = db.Column('user_id',db.Integer , primary_key=True)
    username = db.Column('username', db.String(20), unique=True , index=True)
    password = db.Column('password' , db.String(10))
    email = db.Column('email',db.String(50),unique=True , index=True)
    registered_on = db.Column('registered_on' , db.DateTime)
 
    def __init__(self , username ,password , email):
        self.username = username
        self.password = password
        self.email = email
        self.registered_on = datetime.utcnow()
 
    def is_authenticated(self):
        return True
 
    def is_active(self):
        return True
 
    def is_anonymous(self):
        return False
 
    def get_id(self):
        return unicode(self.id)
 
    def __repr__(self):
        return '<User %r>' % (self.username)
login managerを作ってappをラップ
app = Flask(__name__)
login_manager = LoginManager() # よくlm = ... とする
login_manager.init_app(app)
login view (controller)を設定
login_manager.login_view = 'login'
user_loader callback
@login_manager.user_loader
def load_user(id):
    return User.query.get(int(id))
g 変数
  • requestのライフサイクルでのグローバルスペース
from flask.ext.login import current_user
@app.before_request
def before_request():
    g.user = current_user