Как я могу передать параметры через аутентификацию 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'})