Как я могу передать параметры через аутентификацию OAuth, чтобы мой обратный вызов или контроллер могли использовать?

Я использую OAuth для провайдера (LinkedIn).

Я хочу иметь возможность передавать параметры, чтобы, когда кто-то регистрируется, я мог добавить некоторые дополнительные значения во время создания нового пользователя (я использую Devise).

но как мне это сделать?

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

3 ответов


простой способ сделать это-установить параметры в сеансе, а затем получить к ним доступ в обратном вызове.

в вашем действии, которое перенаправляет поставщику:

session[:additional] = additional_data_hash

в действии, которое обрабатывает обратный вызов от поставщика:

data = session.delete(:additional)

использовать delete чтобы убедиться, что ваш сеанс остается небольшим для последующих запросов.


если добавить GET стиль params к url аутентификации они будут доступны в обратном вызове через Rails request.env объект omniauth.params ключ. Например

если вы войдете через:

link_to "Log In", "/auth/linkedin?foo=bar"

в методе контроллера сопоставляется GET /auth/:provider/callback вы будете:

request.env['omniauth.params'] == { "foo" => "bar" }

ответ был немного поздно, но я надеюсь, что это помогает кто-то.


обратите внимание, что если вы используете ng-token-auth, вы можете передать параметры в $ auth.аутентификация, и они будут использованы при создании модели пользователя. Например:

$auth.authenticate('github', {params: {favorite_color: 'green'})