python – Flask-Security的自定义身份验证方法

python – Flask-Security的自定义身份验证方法,第1张

概述我正在使用flask安全性来验证用户身份.我已经确保使用http_auth_required装饰器正确地进行身份验证 – 用户正在针对用户身份验证(在我的情况下是一个SQLAlchemyUserDatastore),一切都很顺利. 我现在想要使用我自己的身份验证方法(我将使用自定义LDAP验证系统),同时仍然利用Flask-Security给我的东西(像current_user这样的东西).我写了 我正在使用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_securitydef 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的自定义身份验证方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1197711.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存