Gau*_*hah 6 session ruby-on-rails
我有一个使用web api调用的rails应用程序,rails app本身没有任何数据库或用户界面.每个api调用都需要为每个请求发送用户名和密码.
我想为rails app提供一种身份验证机制.我打算这样做:
现在我的问题是我在哪里存储密码?如果我使用会话我明显不能使用cookie存储,我可以使用session_store = :active_record_store但不确定它是否安全,我现在还没有任何数据库所以我为什么要创建一个仅用于会话?是否有其他机制可以在会话中存储密码?(明显安全的方式)
早期的铁路有:
但现在两者似乎都被删除了.还有其他解决方案吗?
答案备注:
我终于想到实现自定义内存存储但它似乎抛出stackoverflow错误.我从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'
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用Redis作为会话存储。我们使用rails3-redis-session-store宝石。来源可以在这里找到。
设置非常简单,并且会话会自动过期,这使得它很安全。配置示例:
YourApp::Application.config.session_store :redis_session_store,
:db => 0,
:expire_after => 10.minutes,
:key_prefix => "your_app:session:"
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用dalli,从而使用memcached作为后端。
希望这可以帮助。