gpt4 book ai didi

ruby-on-rails - rails 在 session 中存储密码

转载 作者:行者123 更新时间:2023-12-03 12:19:21 25 4
gpt4 key购买 nike

我有一个进行 web api 调用的 rails 应用程序,rails 应用程序本身没有任何数据库或用户存储。每个 api 调用都需要为每个请求发送用户名和密码。

我想为 rails 应用程序提供身份验证机制。
我打算这样做:

  • 显示登录页面
  • 获取用户名和密码
  • 存储用户名和密码
  • 通过warden.authenticate 或authlogic.something 执行手动身份验证(或者甚至可能不需要,只需检查 session 是否存储了某些内容)
  • 然后当用户做某事时,我传递之前存储的用户名和密码。

  • 现在我的问题是我在哪里存储密码?
    如果我使用 session ,我显然不能使用 cookie 存储,我可以使用 session_store = :active_record_store但不确定它是否安全,而且我现在还没有任何数据库,所以我为什么要仅为 session 创建一个?
    是否有任何其他机制可以在 session 中存储密码? (显然是安全的方式)

    早期的 rails 有:
  • 内存存储
  • 文件存储

  • 但现在两者似乎都被删除了。那么还有其他解决方案吗?

    答案注释:
  • 存储加密密码将不起作用,因为我需要在进行 api 调用时将原始密码发送到服务器。
  • 我无法控制 API,因此无法更改其身份验证。
  • rails 应用程序没有用户配置文件维护。一切都由 API 调用管理。

  • 我终于想到实现自定义内存存储,但它似乎引发了计算器溢出错误。我从 https://rails.lighthouseapp.com/projects/8994/tickets/1876-uninitialized-constant-actioncontrollersessionmemorystore 得到了代码
    require 'action_dispatch'
    module ActionDispatch
    module Session
    class CustomMemoryStore < ActionDispatch::Session::AbstractStore
    GLOBAL_HASH_TABLE = {} #:nodoc:

    private
    def get_session(env, sid)
    sid ||= generate_sid
    session = GLOBAL_HASH_TABLE[sid] || {}
    session = AbstractStore::SessionHash.new(self, env).merge(session)
    [sid, session]
    end

    def set_session(env, sid, session_data)
    GLOBAL_HASH_TABLE[sid] = session_data
    return true
    end
    end
    end
    end
    Steptools3::Application.config.session_store :custom_memory_store, :key => '_some_xyz'

    最佳答案

    您可以尝试使用 Redis作为 session 存储。我们使用 rails3-redis-session-store gem 。来源可在here .

    它非常容易设置,并且 session 会自动过期,这使得它很安全。
    示例配置:

    YourApp::Application.config.session_store :redis_session_store,
    :db => 0,
    :expire_after => 10.minutes,
    :key_prefix => "your_app:session:"

    另一种方法是使用 dalli ,因此使用 memcached作为后端。

    希望这可以帮助。

    关于ruby-on-rails - rails 在 session 中存储密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8164784/

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