gpt4 book ai didi

ruby-on-rails - 分布式 ruby 环境中的Xero OAuth2 token 刷新

转载 作者:行者123 更新时间:2023-12-03 06:44:43 24 4
gpt4 key购买 nike

我们有一个ruby rails前端和通过Redis运行批处理作业的分布式后端服务。
前端将获取初始Xero oauth2 token 。
token 将在30分钟后过期,刷新 token 将持续60天(最佳),但只能使用一次。
当多个后端进程尝试访问Xero并且 token 已过期时,只有一个可以成功执行,其他所有进程都将失败,因为刷新 token 是一次性使用的。
数据库事务边界使得通过数据库共享 token 不切实际。
我考虑过以下解决方案(我不喜欢其中任何一种):

  • 处理所有xero交互的单例。
  • 在重试过程中包装xero并检查Redis以获取可能具有
    已由另一个进程更新。
  • 使用户反复进行oauth2登录以获得 token
    对于每个后端过程。

  • 不幸的是,我对Ruby和Redis都是新手,因此在这种环境下实现的细节非常有用。

    最佳答案

    我强烈建议您不要将实际的 token 凭据作为传递给Redis的元数据排队到作业中。
    您的access_token和refresh_token应该存储在一个地方。入队时,您应该只将它传递给user_id,在这种情况下,当它被处理时,它将查找user.token_set,然后将该user.token_set ['access_token']传递给xero_client(或者,但是使用xero-ruby SDK进行设置)。
    当您刷新access_token时,将返回一个新的token_set,包括一个新的refresh_token。冲洗并重复。

    Database transaction boundaries make sharing the token via the Database impractical


    这让我有些困惑。后台作业正在执行什么程序?他们不是在处理数据并将其读/写到与存储token_set相同的数据库中吗?他们是否严格要求非应用程序级别的数据库/ API?

    关于ruby-on-rails - 分布式 ruby 环境中的Xero OAuth2 token 刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63005583/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com