【发布时间】: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