Токен подтверждения упоминается дважды в запросе 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
и это работает (при перезагрузке веб-сервера). источник