Итак, у меня очень похожая проблема, когда я на самом деле создаю OpenID провайдера на основе Rails , но используется другим Rails-приложением.Я в основном адаптировал код из
Весь URL был:
http://localhost:3000/openid?openid.assoc_handle=%7BHMAC-SHA1%7D%7B5193d33f%7D%7BdBrUwQ%3D%3D%7D&openid.claimed_id=http%3A%2F%2Flocalhost%3A3000%2Fopenid%2Fwarren&openid.identity=http%3A%2F%2Flocalhost%3A3000%2Fopenid%2Fwarren&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.sreg=http%3A%2F%2Fopenid.net%2Fextensions%2Fsreg%2F1.1&openid.realm=http%3A%2F%2Flocalhost&openid.return_to=http%3A%2F%2Flocalhost%2Fsession%3F_method%3Dpost%26return_to%3D&openid.sreg.required=nickname%2Cemail
У меня была похожая проблема, где сообщалось только о следующих параметрах:
{"action"=>"index", "controller"=>"openid"}
Итак,подозревая, что какой-то параметр (может быть, период?) вызывал его сбой, я просматривал их и удалял их один за другим, пока не обнаружил, что удаление следующего параметра позволяет выполнить все правильно:
openid.mode=checkid_setup
При этом все остальные параметры были правильно проанализированы:
{"openid.assoc_handle"=>"{HMAC-SHA1}{5193d33f}{dBrUwQ==}",
"openid.claimed_id"=>"http://localhost:3000/openid/warren",
"openid.identity"=>"http://localhost:3000/openid/warren",
"openid.ns"=>"http://specs.openid.net/auth/2.0",
"openid.ns.sreg"=>"http://openid.net/extensions/sreg/1.1",
"openid.realm"=>"http://localhost",
"openid.return_to"=>"http://localhost/session?_method=post&return_to=",
"openid.sreg.required"=>"nickname,email",
"action"=>"index",
"controller"=>"openid"}
Я сейчас пытаюсь выяснить, почему openid.mode вызывает эту проблему.Он не работает, даже если я изменяю его на openid.mode = 5, так что это ключ, а не значение, вызывающее проблему.
Подозревая часть строки ".mode" для проблемы (может быть, ".mode" является типом файла или что-то анализируется маршрутизацией?) Я смотрю на этот пост в разрешающие периоды, но это толькоприменяется к значению , а не к ключу: маршрутизация рельсов и параметры с '.'в них
сообщу, если найду больше.
Обновление: Я пытался в другом приложении Rails добавить? Openid.mode = 0 в конец URL - «.mode» не приводит к чтению параметра,но ".modes =" делает и делает ".mod =".Это подтверждает, что «.mode» вызывает ошибку разбора параметров.
Обновление 2: yikes ... на самом деле «? A.mode = 0» работает.Пока что не работает только полная строка «openid.mode», и это относится к различным приложениям Rails.«? openid.mode» ни с чем другим приводит к: Parameters: {"openid.mode" => nil}, но «? openid.mode =» ни с чем после «=» не может передать какие-либо параметры, кроме action & controller.Очень странно.
Обновление 3: ОК, я понял, я думаю, что параметры очищались, т.е. удалялись гемом rack-openid, по пути этого драгоценного камня: / lib /openid.rb: 168, "sanitize_query_string".Кажется, это несовместимо с примером, с которым я работал: https://github.com/openid/ruby-openid/tree/master/examples/rails_openid. Собираюсь переопределить этот метод.
Окончательное обновление: Я заменил эту строку:
oidreq = server.decode_request(params)
с этой строкой, так как мы больше не можем использовать пустой хэш params:
oidreq = server.decode_request(Rack::Utils.parse_query(request.env['ORIGINAL_FULLPATH']))