python – Flask-Security的自定义身份验证方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Flask-Security的自定义身份验证方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1810字,纯文字阅读大概需要3分钟。
内容图文
![python – Flask-Security的自定义身份验证方法](/upload/InfoBanner/zyjiaocheng/773/7f2349fe703a42869a52151f576b05c0.jpg)
我正在使用flask安全性来验证用户身份.我已经确保使用http_auth_required装饰器正确地进行身份验证 – 用户正在针对用户身份验证(在我的情况下是一个SQLAlchemyUserDatastore),一切都很顺利.
我现在想要使用我自己的身份验证方法(我将使用自定义LDAP验证系统),同时仍然利用Flask-Security给我的东西(像current_user这样的东西).我写了一个自定义装饰器,看起来像这样:
def authenticate_with_ldap(func):
@wraps(func)
def wrapper(*args, **kwargs):
if not request.authorization:
return unauthorized_user_handler()
user = user_datastore.get_user(request.authorization.username)
if not user or not authenticate_with_ldap(user.email, user.password):
return unauthorized_user_handler()
return func(*args, **kwargs)
return wrapper
但是,当我查看http_auth_required装饰器时,我看到它使用了一个名为_check_http_auth的私有函数,它正在做一些我自己无法访问私有成员的东西,比如将用户设置为请求上下文堆栈的顶部并发送信号.代码如下所示:
def _check_http_auth():
auth = request.authorization or BasicAuth(username=None, password=None)
user = _security.datastore.find_user(email=auth.username)
if user and utils.verify_and_update_password(auth.password, user):
_security.datastore.commit()
app = current_app._get_current_object()
_request_ctx_stack.top.user = user
identity_changed.send(app, identity=Identity(user.id))
return True
return False
所以我的问题是:拥有自定义身份验证方法的正确方法是什么,同时仍然充分利用Flask-Security?
解决方法:
你可以用一个快速的猴子补丁来完成这个.不理想,但我不确定在Flask-Security团队以更优雅的方式处理这个问题之前你还能做些什么.
import flask_security
def verify_and_update_password_custom(password, user):
return user.verify_password(password)
flask_security.forms.verify_and_update_password = verify_and_update_password_custom
我不确定它是否在其他任何地方使用过.以上工作符合我自己的目的.如果它确实在其他地方被调用,那么你只需要将它monkeypatch到任何地方.
内容总结
以上是互联网集市为您收集整理的python – Flask-Security的自定义身份验证方法全部内容,希望文章能够帮你解决python – Flask-Security的自定义身份验证方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。