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

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

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

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

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

Ответы [ 3 ]

18 голосов
/ 28 августа 2012

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

Если вы аутентифицируетесь с помощью:

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

В методе контроллера, сопоставленном с GET /auth/:provider/callback, вы получите:

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

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

3 голосов
/ 25 апреля 2011

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

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

session[:additional] = additional_data_hash

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

data = session.delete(:additional)

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

0 голосов
/ 23 февраля 2015

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

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

...