Python Token_loader在flask登录中如何工作?

Python Token_loader在flask登录中如何工作?,python,flask-login,Python,Flask Login,我有一个简单的应用程序,在登录后的第一页用@login\u required修饰 #!/usr/bin/python from flask import render_template,request, redirect, url_for, flash, abort,Blueprint from flask_login import login_required,login_user, logout_user,LoginManager from app.models.User import U

我有一个简单的应用程序,在登录后的第一页用@login\u required修饰

#!/usr/bin/python

from flask import render_template,request, redirect, url_for, flash, abort,Blueprint
from flask_login import login_required,login_user, logout_user,LoginManager
from app.models.User import Users
from app import app
from app.config import config
import datetime

admin = Blueprint('admin',__name__)

loginManager = LoginManager()
loginManager.init_app(app)
loginManager.login_view = 'admin.login'

user = None

app.REMEMBER_COOKIE_DURATION = datetime.timedelta(seconds=30)


"""@loginManager.user_loader
def load_user(userid):
     return user"""

@loginManager.token_loader
def load_token(token):
     print "In Token Loader"
     return user


@admin.route('/login',methods=['GET','POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    elif request.method == 'POST':
        username = request.form['username']
        password = request.form['password']

        if username == config.username and password == config.password:
            global user
            user = Users('100',username,password)
            login_user(user,remember=True)
            print "redirecting url"
            return redirect(url_for('admin.index'))
        else:
            flash('Incorrect Credentials')
            return redirect(url_for('admin.login'))

@admin.route('/logout')
@login_required
def logout():
     logout_user()
     return redirect(url_for('admin.login'))

@admin.route('/index')
@login_required
def index():
     return render_template('index.html')
正如您所注意到的,@user\u loader回调被注释掉了

当@user\u loader未注释时, 1.登录已成功验证 2.成功显示第一页(代码中的索引方法) 3.@Toke_加载器回调未调用

我想调用@token\u loader回调,所以我评论了@user\u loader

当@owner\u loder被注释时 1.登录已验证(我可以看到令牌已生成) 2.但加载索引方法失败,堆栈跟踪如下

 File "/Library/Python/2.7/site-packages/werkzeug/local.py", line 297, in _get_current_object
    return self.__local()
  File "/Library/Python/2.7/site-packages/flask_login.py", line 46, in <lambda>
    current_user = LocalProxy(lambda: _get_user())
  File "/Library/Python/2.7/site-packages/flask_login.py", line 794, in _get_user
    current_app.login_manager._load_user()
  File "/Library/Python/2.7/site-packages/flask_login.py", line 363, in _load_user
    return self.reload_user()
  File "/Library/Python/2.7/site-packages/flask_login.py", line 325, in reload_user
    user = self.user_callback(user_id)
文件“/Library/Python/2.7/site packages/werkzeug/local.py”,第297行,在当前对象中
返回self.\uuu local()
文件“/Library/Python/2.7/site packages/flask_login.py”,第46行,在
当前用户=本地代理(lambda:\u get\u user())
文件“/Library/Python/2.7/site packages/flask_login.py”,第794行,在_get_user中
当前应用程序登录管理器。加载用户()
文件“/Library/Python/2.7/site packages/flask\u login.py”,第363行,在加载用户中
返回self.reload_user()
文件“/Library/Python/2.7/site packages/flask_login.py”,第325行,在reload_user中
user=self.user\u回调(user\u id)
我推断的是,由于我注释了@user\u loader callback,它被设置为None,因此我得到了错误

我试图注释@user\u loader的原因是因为我假设如果注释@user\u loder callback,那么将调用@token\u loader callback,但看起来@user\u loader是必需的

如何使@token\u loader被调用