我正在尝试使用令牌对用户进行身份验证。在
我使用以下方法成功地使流程正常运行:
@login_manager.user_loader
def load_user(userid):
from models import User
return User.get(userid)
但是,我不知道在使用token
时如何使进程工作。在
{cd2>我的文件中有:
^{pr2}$登录用户时:
def _do_login_user(user):
# User must have been authenticated
if not user: raise_error('user does not exist', 'A user with this email address does not exist', 404)
# Check if user account is enabled
if not user.is_active:
raise_error('inactive account', 'Your account has not been enabled. Check your email Inbox and Spam folders for the confirmation email', 401)
# Use Flask-Login to sign in user
login_user(user)
return json.dumps({"data":{"success":"true", "message":"You have logged in successfully!"}})
用户模型
class User(db.Model, UserMixin):
def get_auth_token(self):
s = Serializer(app.config['SECRET_KEY'], expires_in = 6000)
return s.dumps({'id': self.id, 'password': self.password})
在什么时候我应该调用User.get_auth_token()
,我应该在session
中手动设置这个令牌?在
最后,@login_manager.token_loader
何时被调用?在
谢谢你的帮助。在
我也曾试过让这个工作正常,但后来我放弃了使用普通的user_loader,我唯一能建议的就是看看这里flask-login并检查实际代码,从中你可以看到它在会话中添加了用户标识,这样你就不用管它了。在
不管怎么说,我花了很多时间试图让它工作,最后我选择了类似于jwt and flask-login的东西
不知道这有多大帮助,但当你失去耐心时值得一读
``@登录_manager.token_加载程序`都是关于“记住我”的功能。在
只有当浏览器没有会话cookie访问您的站点并且用户以前使用
login_user(user, remember=True)
登录时,才会调用它。在您可以通过以下方式刺激flask login调用token_loader decorated函数:
…或者使用类似于答案末尾的代码。在
您不需要自己调用
User.get_auth_token()
。当您调用login_user(user, remeber=True)
并定义了@login_manager.token_loader
时,Flask login将调用它看看
LoginManager._set_cookie
和LoginManager._load_from_cookie
,看看Flask Login是如何做到这一切的。在您的
_do_login_user
函数在没有remember=True
的情况下调用login_user
,因此不会调用任何“记住我”功能。在下面是一些代码,应该说明调用相关函数的时间:
相关问题 更多 >
编程相关推荐