【问题标题】:Rails with Redis and Devise not working带有 Redis 和设计的 Rails 无法正常工作
【发布时间】:2017-05-02 08:20:22
【问题描述】:

我已将redis-rb 添加到我的rails 5 应用程序中,以便处理由sidekiq 管理的后端进程。

我的应用中的用户身份验证由 Devise 管理。

在让我的所有工作人员等正常工作后,我的会话存储现在似乎已损坏。问题是当我退出时,用户会话不再被破坏,因此无法退出。

这是我的 session_store.rb 配置:

if Rails.env.production?
  Rails.application.config.session_store :cookie_store, key: '_myapp_session', domain: ENV['SESSION_STORE_DOMAIN'], tld_length: ENV['TLD_LENGTH'].to_i
else
  Rails.application.config.session_store :cookie_store, key: '_myapp_session', domain: :all, tld_length: 2
end

在遇到此错误后,我还尝试使用 redis-session-store gem,但这会导致 InvalidAuthenticityToken 错误。

不过,我真的不想将会话存储更改为使用 redis。有什么办法可以解决这个问题还是我错过了什么?

更新 1

sessions_controller.rb(设计)

def destroy
    signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name))
    set_flash_message! :notice, :signed_out if signed_out
    yield if block_given?
    respond_to_on_destroy
end

【问题讨论】:

  • 您可以粘贴退出操作的代码吗?
  • 我已经这样做了@whodini9。这只是简单的设计代码。我在此操作中没有更改任何内容。
  • 您可以尝试在此操作中添加:session.delete(:user_id) 吗?
  • 这似乎解决了@whodini9。非常感谢。您能否将其添加为答案,以便我向您推荐?
  • @Herm 我们可以使用 redis-rb gem 与设备集成以进行身份​​验证和会话管理吗?

标签: ruby-on-rails ruby session devise redis


【解决方案1】:

在您的sessions_controller.rb 中,将session.delete(:user_id) 添加到destroy 方法中

def destroy
  #...
  session.delete(:user_id)
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 2014-01-29
    • 1970-01-01
    • 2019-02-22
    • 2022-01-25
    相关资源
    最近更新 更多