Mos*_*man 6 authentication session mobile ruby-on-rails-3
我正在尝试为移动应用程序构建rails 3后端.但是,我是创建rails 3应用程序的新手.
用户需要在服务器上进行会话,但我不支持普通的cookie,因此我需要发送session_id以及每个请求.
我应该在rails 3中使用什么样的身份验证系统?有宝石吗?
我已经读过在rails 2中可以从URL设置session_id,但是出于安全考虑,这个功能会从rails 3中删除.这是真的吗?如果有办法做到这一点,我很感兴趣,尽管可能存在安全漏洞.
一个小更新:Devise 不再有authentication_token,因为它的实现被认为太不安全。Brian Auton 的建议是一个不错的选择。
他的方法的总结是他在单独的模型中生成authentication_key ANDauthentication_secret。然后,您通过发送密钥和机密进行身份验证,如果找到匹配项,您将暂时以用户身份登录。
在您的应用程序控制器中,这看起来像这样:
class ApplicationController < ActionController::Base
before_filter :authenticate_from_token
protected
def authenticate_from_token
if current_token.try :authenticatable
sign_in token.authenticatable, store: false
end
end
def current_token
AuthenticationToken.find_authenticated({
secret: (params[:secret] || request.headers[:secret]),
secret_id: (params[:secret_id] || request.headers[:secret_id]),
})
end
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下,令牌authenticatable是用户模型,或者任何其他可验证的东西(令牌是多态的)。正如您所看到的,它可以轻松地与 Devise 一起使用。
我非常喜欢这个方法,并在最近的 API 中实现了它。请在他的网站上阅读。
过时的答案,保留以供参考旧版本的 Devise:Devise 有一个“authentication_token”列,我可以使用它来验证用户身份。我可以有一个登录 API 方法,我也会发送用户名 + 密码,然后取回令牌并将其存储在本地以签署所有其他调用。它基本上是一个 cookie 系统,但由 Devise 直接支持。
除此之外,我可以在每次调用或每次“会话”时重新生成令牌。