您好我正在查看flask-login处理会话登录很好,这项工作很适合模板和查看我可以访问会话的地方。
尽管如此,我一直试图知道是否有办法将user_token发送给授权的电话。我查看了文件,对此非常模糊。它说我应该
我见过以下情况(如果我错了请纠正我)
答案 0 :(得分:9)
我有一个更好的方法,更符合我的需求。基本上我扩展了LoginManager非常简单和直接,如果你看看flask-plugin的来源,你会发现有一个调用@before_request有一个叫做reload_user的方法,这就是我最终做的事情< / p>
class CustomLoginManager(LoginManager):
def reload_user(self):
if request.headers.has_key('Authorization'):
ctx = _request_ctx_stack.top
ctx.user = User.get(token=request.headers['Authorization'])
return
super(CustomLoginManager,self).reload_user()
如果在我的标题中我传递了授权密钥,那么我将尝试使用此密钥加载而不是基于会话的方法,当然我需要通过签署密钥来为此方法添加更多安全层,但总体而言是我需要的。
谢谢大家。
BTW你可以覆盖一堆别人的方法,我非常推荐看一下插件源代码,这样你就可以更深入地了解它的代码值得阅读的644行代码
https://github.com/maxcountryman/flask-login/blob/master/flask_login.py
答案 1 :(得分:5)
看起来你想要像OAuth这样的东西,而不是使用Flask-Login。如果您不知道(引自维基百科),OAuth是一种利用令牌以便代表资源所有者访问资源的协议。考虑让用户能够向您网站的某些部分发放代客密钥。许多网站(如Google,Facebook和Twitter)都使用OAuth来验证第三方客户端,以便访问某些用户资源。
目前,不太灵活且不太复杂的OAuth 1.0a与更灵活但更复杂的OAuth 2.0之间存在分歧。 Python中的OAuth 1.0a存在许多库,但OAuth 2.0中存在的库较少。但是,如果稳定性现在不是最受关注的问题,那么OAuth 2.0就可以选择。
对于客户端,Flask-OAuth可用,如果您使用的是OAuth 1.0a,它由Flask创建者Armin维护,因此您可以放心,它不会死亡。对于提供商,有一个名为Flask-OAuthProvider的扩展名,支持OAuth 1.0a。如果您不介意自己集成并希望获得2.0支持,pyoauth2会为您提供客户端和提供程序,但它看起来维护较少。
希望这可以帮助您探索使用auth令牌的一种可能途径,尽管不使用Flask-Login。在我看来,除非他们理解协议,否则不应该重新实现协议,因此即使您决定不使用它,我也建议您阅读OAuth。其中包含许多优秀文章,例如this article from Google和this one, too。
答案 2 :(得分:1)
就像更新一样,Flask-Login现在有一个'header_loader'函数,可以与标准'user_loader'一起使用。直接来自文档:
@login_manager.header_loader
def load_user_from_header(header_val):
if header_val.startswith('Basic '):
header_val = header_val.replace('Basic ', '', 1)
try:
header_val = base64.b64decode(header_val)
except TypeError:
pass
return User.query.filter_by(api_key=header_val).first()
的链接