3

私は Flask-Login を使用しており、current_user.is_authenticated() を呼び出してユーザーがログインしているかどうかを確認したいと考えています。

__init__.py私の Flask アプリケーションは、アプリをセットアップし、ブループリントをセットアップし、Flask-Login を初期化するメイン ファイルを含むブループリントに編成されています。アプリケーションをインスタンス化し、デバッグモードの場合はそれを実行するスクリプトがありrun.pyます。__init__.py

__init.py__(部分的に) 次のようになります。

from flask import Flask, session, request, render_template                                                            
from flask.ext.login import LoginManager, current_user

from panel.views import dash, projects

from panel.users.models import User, AnonymousUser

app = Flask(__name__)
app.config.from_object("configure") 

login_manager = flask_login.LoginManager()
login_manager.init_app(app)
login_manager.login_view = "/signin"
login_manager.anonymous_user = AnonymousUser
@login_manager.user_loader
def load_user(str_id):
    return User.user_loader(str_id)

# Register all blueprints here.
app.register_blueprint(dash.bp, url_prefix="/dash")
app.register_blueprint(projects.bp, url_prefix="/projects")

logging.warning(current_user.is_authenticated())

これを実行すると、run.py(部分的には次のように見えます)から:

from panel import app 

app.run(host='0.0.0.0', debug=True)

この例外が発生します:

Traceback (most recent call last):
  File "run.py", line 5, in <module>
    from panel import app
  File "/opt/www/panel/panel/__init__.py", line 40, in <module>
    logging.warning(current_user.is_authenticated())
  File "/opt/virtualenvs/coefficient/lib/python2.6/site-packages/werkzeug/local.py", line     336, in __getattr__
    return getattr(self._get_current_object(), name)
  File "/opt/virtualenvs/coefficient/lib/python2.6/site-packages/werkzeug/local.py", line 295, in _get_current_object
    return self.__local()
  File "/opt/virtualenvs/coefficient/lib/python2.6/site-packages/flask_login.py", line 403, in <lambda>
    current_user = LocalProxy(lambda: _request_ctx_stack.top.user)
AttributeError: 'NoneType' object has no attribute 'user'

簡潔にするために一部の行を省略したため、そのトレースバックの行番号は投稿したコードと一致しませんが、その行logging.warning(current_user.is_authenticated())がエラーが発生した場所のようであることがわかります。

どんな助けでも大歓迎です。

4

2 に答える 2

6

あなたは電話することはできません

current_user.is_authenticated()

メソッド/ビューの外側にあるコードは、リクエストの外側で実行されるためです。

リクエストに参加していない場合、current_user認証を確認する対象はありません。

于 2012-10-04T22:29:46.593 に答える