рельсы, не может получить параметры из URL - PullRequest
0 голосов
/ 12 декабря 2011

Я пытаюсь использовать REST API Google Federated Login.Я могу успешно связаться с сервером Google и проверить пользователя, но не могу получить параметры из URL-адреса возврата

, например: http://mysite.com/login/return?openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fud...

Все переменные вэта возвращаемая строка не доступна в массиве params.Я понятия не имею, как их вытащить.requst.url, request.query_parameter, и все подобные вызовы не возвращают строку запроса.

Ответы [ 2 ]

0 голосов
/ 20 мая 2013

Итак, у меня очень похожая проблема, когда я на самом деле создаю 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']))
0 голосов
/ 13 декабря 2011

Я думаю, что нашел проблему.Я использовал библиотеку open-uri для вызова URL конечной точки Google, чтобы он мог выйти за пределы обычного цикла ответа / запроса rails.С тех пор я использовал запросы Net :: HTTP и анализирую информацию из ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...