Ruby on rails &引用;Rails by Example“;身份验证实现

Ruby on rails &引用;Rails by Example“;身份验证实现,ruby-on-rails,ruby-on-rails-3,session,authentication,cookies,Ruby On Rails,Ruby On Rails 3,Session,Authentication,Cookies,在Michael Hart的书中,此代码用于实现身份验证: module SessionsHelper def sign_in(user) cookies.permanent.signed[:remember_token] = [user.id, user.salt] #permanent # -alternatively- # cookies.signed[:remember_token]={ # :value => [user.id, user.sa

在Michael Hart的书中,此代码用于实现身份验证:

module SessionsHelper
def sign_in(user)
    cookies.permanent.signed[:remember_token] = [user.id, user.salt] #permanent
    # -alternatively-
    # cookies.signed[:remember_token]={
    #   :value => [user.id, user.salt],
    #   expires => some_time.from_now
    # }

    current_user = user
end

def current_user=(user)
    @current_user = user
end

def current_user
    return @current_user ||= user_from_remember_token
end

private
    def user_from_remember_token
        #passes array of length two as a parameter -- first slot contains ID,
        #second contains SALT for encryption
        User.authenticate_with_salt(*remember_token)
    end

    def remember_token
        #ensures return of a double array in the event that
        #cookies.signed[:remember_token] is nil.
        cookies.signed[:remember_token] || [nil,nil]
    end

    end
它的工作做得很好,我可以登录无限的时间,或为一个有限的时间,我希望。 但它也有一个缺点,cookies存储在客户端,即使浏览器关闭,cookies也不会消失

现在我想知道,由于rails会话在浏览器关闭后会被破坏,我如何将它们与此处提供的cookie结合起来,以实现具有以下特征的身份验证:

--如果用户登录, 数据应存储在会话中 这样在用户关闭浏览器后,他们就可以登录

--如果用户登录,则选中“记住我”复选框 他们的数据应该存储在一个有效期很长的cookie中

对于这一点,我们将采取什么样的方式来保持安全和简单? 我在网上搜索了一下,发现最近没有什么东西(Rails 3)能证明这一点 可以指引我正确的方向。 我正在考虑为会话和cookie创建两个单独的模块,并在控制器中激发它们各自的sign_-in方法,无论是否存在memory_-me参数,但这似乎有很多重复

PS我不是在寻找任何认证宝石来提供这一功能,我宁愿自己实现它


谢谢

我意识到你说你不是在寻找认证宝石,如果你只是想学习如何做这类事情,这很好。但是,如果您计划在生产中使用此解决方案,我非常建议您出于安全目的使用已建立的解决方案。您可以在github上查看一些可用的解决方案源代码,以找到可能的解决方案