Токен подтверждения упоминается дважды в запросе GET, но только один раз в URL?

Я сталкиваюсь со странной ошибкой, когда перехожу по ссылке для подтверждения из электронной почты devise. Ссылка верна:

.../ru/users/confirmation?confirmation_token=yDNePwDTbxBzy5PqZE1e

Однако в журнале сервера я получаю:

Started GET "/ru/users/confirmation?confirmation_token=yDNePwDTbxBzy5PqZE1e?confirmation_token=yDNePwDTbxBzy5PqZE1e"

Как видите, это упоминается дважды. По этой причине я не могу подтвердить адрес электронной почты.

Самое странное, что он работает в webrick, и я вижу эту проблему только в производстве (это nginx + passenger).

Это может быть проблема с моей настройкой. Я использую Rails v4 и Devise v3. Я переписал контроллер подтверждения редактирования по умолчанию #edit и несколько других, так как я хотел реализовать стратегию "регистрация по электронной почте", а также использовать модель ldap_authenticatable вместо database_authenticatable. Я также исправил ldap_authenticatable для поддержки нескольких LDAP. Но даже в этом случае - вы можете указать мне, где я должен искать, чтобы разобраться в моей проблеме?

редактировать

Промежуточное ПО: производственная среда на 4 записи короче:

  • производство

      $ RAILS_ENV=production bundle exec rake middleware 
      use Rack::Sendfile 
      use Rack::Lock 
      use Rack::Runtime 
      use Rack::MethodOverride 
      use ActionDispatch::RequestId 
      use Rails::Rack::Logger 
      use ActionDispatch::ShowExceptions 
      use ActionDispatch::DebugExceptions 
      use ActionDispatch::RemoteIp 
      use ActionDispatch::Callbacks 
      use ActiveRecord::ConnectionAdapters::ConnectionManagement 
      use ActiveRecord::QueryCache 
      use ActionDispatch::Cookies 
      use ActionDispatch::Session::CookieStore 
      use ActionDispatch::Flash
      use ActionDispatch::ParamsParser
      use Rack::Head
      use Rack::ConditionalGet
      use Rack::ETag
      use Warden::Manager
      run Login::Application.routes
    
  • развитие:

      $ RAILS_ENV=development bundle exec rake middleware
      use Rack::Sendfile
    + use ActionDispatch::Static
      use Rack::Lock
      use Rack::Runtime
      use Rack::MethodOverride
      use ActionDispatch::RequestId
      use Rails::Rack::Logger
      use ActionDispatch::ShowExceptions
    + use WebConsole::Middleware
      use ActionDispatch::DebugExceptions
      use ActionDispatch::RemoteIp
    + use ActionDispatch::Reloader
      use ActionDispatch::Callbacks
    + use ActiveRecord::Migration::CheckPending
      use ActiveRecord::ConnectionAdapters::ConnectionManagement
      use ActiveRecord::QueryCache
      use ActionDispatch::Cookies
      use ActionDispatch::Session::CookieStore
      use ActionDispatch::Flash
      use ActionDispatch::ParamsParser
      use Rack::Head
      use Rack::ConditionalGet
      use Rack::ETag
      use Warden::Manager
      run Login::Application.routes
    

Редактировать 2

Я выяснил, в чем причина: ссылка в письме была http. Если я изменю это на https - это работает. Так что нужно просто добавить

 config.action_mailer.default_url_options = {:protocol => 'https'}

в config/environments/production.rb и это работает (при перезагрузке веб-сервера). источник

0 ответов

Другие вопросы по тегам