【问题标题】:Session token not saving Rails 6 production build会话令牌不保存 Rails 6 生产版本
【发布时间】:2021-03-18 23:02:36
【问题描述】:

我正在构建一个 Rails 6.0.3.4 后端、React.js 前端应用程序,由于某种原因,我的会话令牌在开发构建工作完美之后没有保存在生产构建中。我放松了对 Heroku 生产构建的限制(在 session_store.rb 中,我将其从需要特定域调整为所有域)。当我登录时,我让它返回会话令牌数据并且它在那里但它没有保存任何东西(尝试了多个浏览器/计算机)。在我的反应前端,我的登录/注册组件中有{withCredentials: true}

session_store.rb

if Rails.env.production?
  Rails.application.config.session_store :cookie_store, key: '_10-athletes', domain: :all
else
  Rails.application.config.session_store :cookie_store, key: '_10-athletes'
end

在我的 sessions_controller.rb

def create
    @user = User.find_by(email: session_params[:usernameOrEmail])
    unless @user
      @user = User.find_by(username: session_params[:usernameOrEmail])
    end

    if @user && @user.authenticate(session_params[:password])
      login!
      render json: {
        logged_in: true,
        user: @user,#returns gthe user
        session: session, #returns appropriate session info: session_id: 32 digit hex value, user_id: 1
        production: Rails.env.production? #returns true, was curious if it was not registering properly

      }
    else
      # working fine
      }
    end
  end

def is_logged_in?
    if logged_in? && current_user
      # logged_in? is returning false, jumping to else
    else
      render json: {
        session: session[:user_id], #returns null
      }
    end
  end

application_controller.rb

def login!
    session[:user_id] = @user.id
  end
def logged_in?
    !!session[:user_id]
  end

config/application.rb

  class Application < Rails::Application
    config.load_defaults 6.0
    config.middleware.use ActionDispatch::Cookies
    config.middleware.use ActionDispatch::Session::CookieStore
    config.middleware.insert_after(ActionDispatch::Cookies, ActionDispatch::Session::CookieStore)
  end

config/environments/production.rb

Rails.application.configure do

  config.cache_classes = true
  config.eager_load = true
  config.consider_all_requests_local       = false
  config.action_controller.perform_caching = true
  config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
  config.assets.compile = false
  config.active_storage.service = :local
  config.force_ssl = true # tested both including this line and not
  config.api_only = false #tested both including this line and not
  config.log_level = :debug
  config.log_tags = [ :request_id ]
  config.action_mailer.perform_caching = false
  config.i18n.fallbacks = true
  config.active_support.deprecation = :notify
  config.log_formatter = ::Logger::Formatter.new
  if ENV["RAILS_LOG_TO_STDOUT"].present?
    logger           = ActiveSupport::Logger.new(STDOUT)
    logger.formatter = config.log_formatter
    config.logger    = ActiveSupport::TaggedLogging.new(logger)
  config.active_record.dump_schema_after_migration = false
end

编辑:在 production.rb 中添加

【问题讨论】:

    标签: ruby-on-rails reactjs authentication


    【解决方案1】:

    您是否启用了安全 cookie 作为选项?使用 SSL?

    【讨论】:

    • 是的,在 production.rb 我有config.force_ssl = true
    • 我刚刚在帖子中添加了 production.rb
    • 我遇到了这个问题并且没有保存 cookie,因为我启用了 cookie,但没有 ssl。你能通过github.com/rack/rack/blob/master/lib/rack/session/abstract/…#commit_session 看看它是否到达 write_session(req, session_id, session_data, options)
    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 2012-10-21
    • 2013-08-27
    • 1970-01-01
    • 2011-06-14
    • 2016-10-25
    • 2015-12-08
    • 2019-06-14
    相关资源
    最近更新 更多