
我现在想要使用我自己的身份验证方法(我将使用自定义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的自定义身份验证方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)