私は Flask-Login
動作します。
彼らのドキュメントには、事前に入力されたユーザーのリストを使用していることがわかります。データベースに保存されているユーザーリストを操作したい。
ただし、この点については理解できません Flask-Login
モジュール。
@login_manager.user_loader
def load_user(userid):
#print 'this is executed',userid
return user(userid, 'asdf')
このコードはリクエストごとに呼び出されますか?これは、ユーザーオブジェクトのすべての詳細を読み込むために使用されますか?
今のところ、私はこのコードを持っています:
@app.route('/make-login')
def make_login():
username = 'asdf'
password = 'asdf'
user_data = authenticate(username, password)
user_obj = user(user_data[0], user_data[1])
login_user(user_obj)
return render_template('make-login.html')
/ make-loginにアクセスすると、ログインしたいです。
私のユーザークラス:
class user(object):
def __init__(self, id, username, active=True):
self.username = username
self.id = id
#self.active = active
def is_authenticated(self):
return True
def is_active(self):
return True
def is_anonymous(self):
return False
def get_id(self):
return 5
また、認証/登録用に別の2つの関数を作成しました
def authenticate(username, password):
cursor = db.cursor()
password = md5.md5(password).hexdigest()
try:
query = "SELECT * FROM `users` WHERE `username` = %s AND `password` = %s"
cursor.execute(query, (username, password))
results = cursor.fetchall()
#print results[0][0]
#print "here i am"
if not results:
return False
else:
user_data = [results[0][0], results[0][1]]
return user_data
#self.authenticated = True
#self.user_id = results[0][0]
#session['username'] = results['username']
#print type(results)
except db.Error, e:
return 'There was a mysql error'
def register(username, password, email, *args):
cursor = db.cursor()
password = md5.md5(password).hexdigest()
try:
#query = "INSERT INTO `users` (`username`, `password`, `email`) VALUES ('%s', '%s', '%s')" % (username, password, email)
query = "INSERT INTO `users` (`username`, `password`, `email`) VALUES (%s, %s, %s)"
cursor.execute(query, (username, password, email))
db.commit()
return True
except db.Error, e:
print 'An error has been passed. %s' %e
db.rollback()
return False
これの作り方がわかりません Flask-Login
MySQLで動作します。また、ユーザーがログインしているかどうかもわかりません。ユーザーIDまたはユーザー名を取得するにはどうすればよいですか?
誰もがこれをどのようにいくつかの行で説明できますか Flask-Login
動作しますか?
Flask-loginには実際にユーザーバックエンドはありません。ユーザーのログインとログアウトを支援するセッションメカニズムを処理するだけです。 (メソッドを装飾することで)ユーザーを表すものを伝える必要があり、ユーザーが「アクティブ」かどうかを知る方法を理解する必要があります(「アクティブ」は異なるアプリケーションで異なることを意味することがあるため) )。
ドキュメント を読んで、それが何をするかとしないことを確認してください。ここでは、dbバックエンドとの接続にのみ集中します。
まず、ユーザーオブジェクトを定義します。ユーザーのプロパティを表します。このオブジェクトは、データベース、LDAP、その他何でも照会でき、ログインメカニズムをデータベースバックエンドに接続するフックです。
この目的で login example スクリプトを使用します。
_class User(UserMixin):
def __init__(self, name, id, active=True):
self.name = name
self.id = id
self.active = active
def is_active(self):
# Here you should write whatever the code is
# that checks the database if your user is active
return self.active
def is_anonymous(self):
return False
def is_authenticated(self):
return True
_
ユーザーオブジェクトを作成したら、ユーザーを読み込むメソッドを作成する必要があります(基本的に、上記のUser
クラスのインスタンスを作成します)。このメソッドは、ユーザーIDで呼び出されます。
_@login_manager.user_loader
def load_user(id):
# 1. Fetch against the database a user by `id`
# 2. Create a new object of `User` class and return it.
u = DBUsers.query.get(id)
return User(u.name,u.id,u.active)
_
これらの手順が完了すると、ログインメソッドは次のようになります。
ユーザー名とパスワードが(データベースに対して)一致するかどうかを確認します-このコードを自分で記述する必要があります。
認証が成功した場合、ユーザーのIDを取得してlogin_user()
に渡します
Flask-loginは、すべてのリクエストの前にユーザーをロードしようとします。そのため、次のサンプルコードはすべてのリクエストの前に呼び出されます。現在のセッションのユーザーIDを確認するために使用され、そのIDのユーザーオブジェクトを読み込みます。
@login_manager.user_loader
def load_user(userid):
#print 'this is executed',userid
return user(userid, 'asdf')
GithubのFlask-loginソースコードを見ると、関数init_appの下に次の行があります。
app.before_request(self._load_user)
したがって、すべての要求の前に、_load_user関数が呼び出されます。 _load_user関数は、実際には条件に基づいて別の関数「reload_user()」を呼び出します。最後に、reload_user()関数は、作成したコールバック関数を呼び出します(例ではload_user())。
また、flask-loginはユーザーをログイン/ログアウトするメカニズムのみを提供します。 mysqlデータベースを使用しているかどうかは関係ありません。
Flask-Login のドキュメントによると、ユーザーオブジェクトを返す必要があり、ユーザーIDが見つからない場合は、例外ではなくNoneを返す必要があります。
@login_manager.user_loader
def load_user(userid):
try:
#: Flask Peewee used here to return the user object
return User.get(User.id==userid)
except User.DoesNotExist:
return None
Flask-Security を使用すると、データベースアクセスのためにFlask-LoginとSQLAlchemyを組み合わせて、ユーザーレコードのバックエンド処理の多くを自動化できます。
クイックスタート チュートリアルで開始できます。 app.config ['SQLALCHEMY_DATABASE_URI']をMySQLデータベース接続文字列に設定します。
Flask=ログインの使用例: https://bitbucket.org/leafstorm/flask-login/src/3160dbfc7cfc/example/login-example.py ログインが必要なすべてのメソッドに@login_requiredを使用する必要があります。たとえば、
@app.route('/make-login')
@login_required
def make_login():
...