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

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

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

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

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

3 ответа

Решение

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

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

session[:additional] = additional_data_hash

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

data = session.delete(:additional)

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

Если вы добавите 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" }

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

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

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

Другие вопросы по тегам