Devise + Omniauth - Как передать дополнительные параметры?

У меня есть возможность в приложении загрузить /users/auth/facebook для подключения к facebook. Я хочу знать, откуда пришел запрос. Был ли он от пользователя, который регистрируется в facebook, или существующего пользователя, который просто хочет подключиться к facebook. Основываясь на типе, ответы очень разные.

Как я могу передать параметр во время проверки на omniauth. Я пробовал:

/users/auth/facebook?connect_action=signup_connect_to_facebook

Но этот параметр connection_action не сделал этого, когда он нажал кнопку AuthenticationsController # Create

Идеи? Thansk

Ответ 1

Вы должны использовать параметры :params, как в

omniauth_authorize_path(:user, :facebook, var: 'value', var2: 'value2' )

а затем в обратном вызове вы можете получить доступ к request.env['omniauth.params'], чтобы получить хэш!:)

Ответ 2

Если запрос сделан с разных страниц вашего приложения, вы можете проверить request.env ['omniauth.origin']. Omniauth автоматически сохраняет эту переменную.

Здесь - более подробное объяснение

Что касается передачи пользовательских параметров, я попытался сделать это безуспешно. Обходной путь заключается в том, чтобы сохранить его в сеансе перед тем, как обратиться к провайдеру, как описано здесь.

Надеюсь, это поможет вам.

Ответ 3

Для facebook используйте параметр "state" и передайте то, что хотите, но не забывайте кодировку.

/users/auth/facebook?state=parameter

Вы можете отправить этот параметр в виде кодировки json, а затем в обратном вызове проанализировать его.