Python 远程服务提供用户信息时如何使用Flask登录?

Python 远程服务提供用户信息时如何使用Flask登录?,python,flask,flask-login,Python,Flask,Flask Login,我正在构建一个Flask应用程序,并开始使用Flask登录进行身份验证。困扰我的是Flask Login为Flask处理的每个请求调用load_用户回调。以下是来自以下方面的示例: 要检索用户,我需要通过VPN向远程web服务传递会话令牌,远程web服务执行db查询——这会导致每个web请求都有明显的延迟。我的load_用户如下所示: @login_manager.user_loader def load_user(userid): # notice that I don't even

我正在构建一个Flask应用程序,并开始使用Flask登录进行身份验证。困扰我的是Flask Login为Flask处理的每个请求调用load_用户回调。以下是来自以下方面的示例:

要检索用户,我需要通过VPN向远程web服务传递会话令牌,远程web服务执行db查询——这会导致每个web请求都有明显的延迟。我的load_用户如下所示:

@login_manager.user_loader
def load_user(userid):
    # notice that I don't even use the userid arg
    try:
        # have to get session_token from session; why not 
        # just get the entire user object from session???
        token = session.get('session_token')
        user_profile = RestClient().get_user_profile(token)
        return User(user_profile['LDAP_ID'])
    except:
        return None

似乎我在颠覆这个框架。可以从会话中存储/检索用户,那么为什么还要从web服务中获取它呢?这个选项似乎也颠覆了Flask登录,但消除了延迟并充分利用了会话

处理此问题的最佳方法是使用memcached或redis(查找帮助)之类的工具缓存会话信息

您应该有一个键值缓存存储区,该存储区的结构如下:

关键字:sessionID 值:用户对象

这是大多数框架所做的——Flask登录是一个通用工具——因此您必须自己实现它


顺便说一句,如果您正在寻找一种在后端抽象掉那些讨厌的LDAP内容的方法,那么您可能需要检查一下——它们与LDAP服务器同步,并在其上提供REST API。还有一个用于与之交互的Flask库:。

感谢您提供的信息,我们将redis用于其他内容,因此可能会将其用于缓存会话。有趣的是,您提到LDAP,我们几乎完成了从LDAP到数据库的迁移。LDAP是一个很好的工具,对于我们的应用程序来说,它几乎没有任何价值。是的--LDAP非常糟糕:(很多人因为遗留的原因而使用它,但它太烦人了><你应该可以使用redis进行键/值会话存储--这可能是你最好的选择。
@login_manager.user_loader
def load_user(userid):
    # notice that I don't even use the userid arg
    try:
        # have to get session_token from session; why not 
        # just get the entire user object from session???
        token = session.get('session_token')
        user_profile = RestClient().get_user_profile(token)
        return User(user_profile['LDAP_ID'])
    except:
        return None