【问题标题】:remember_me with warden与典狱长一起记住我
【发布时间】:2011-05-26 14:35:26
【问题描述】:

对于我最近的项目,我使用的是https://github.com/hassox/rails_warden。它非常适合我的需求,只是我找不到实现 remember_me 的好方法。我知道从安全的角度来看,要记住我是出了名的困难,所以我希望有一个项目可以完成这项工作。有人看到了什么或有一个好主意吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 remember-me warden


    【解决方案1】:

    好的,这就是我的解决方法

     # User model must have remember_token attribute
    
     # in config.ru
     use Rack::Cookies
     run MyApp
    
      # in lib/strategies.rb
      Strategies.add(:cookie) do
        def valid?
          env['rack.cookies']['user.remember.token']      
        end
    
        def authenticate!
          if user = User.find_by_remember_token(cookies['user.remember.token'])
            success! user
          else
            fail! "Could not log in"
          end
        end
      end
    
      Manager.after_authentication :scope => :user do |user, auth, opts|
        auth.env['rack.cookies']['user.remember.token'] = user.generate_remember_token! # sets its remember_token attribute to some large random value and returns the value
      end
    
      Manager.before_logout :scoper => :user do |user, auth, opts|
        user.update_attribute :remember_token, nil
      end
    

    【讨论】:

      【解决方案2】:

      Devise 是 Warden 之上的身份验证解决方案,具有 rememberable 实现。

      【讨论】:

      • 我知道设计有一个容易记住的实现,但我没有意识到这是一个守望者策略。太完美了,我可以将它作为我的守望者配置中的第一个策略插入。将集成并确认它有效。
      • 我会在不依赖设计的情况下对答案感兴趣,因为我正在尝试在 sinatra 应用程序中实现。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 2017-09-05
      • 2014-01-22
      相关资源
      最近更新 更多