Omniauth: вход через Github (токен доступа 404) - PullRequest
2 голосов
/ 11 января 2012

Я использую Omniauth, чтобы позволить пользователям войти в систему с Github.

Шаг 1. Пользователь отправляется на /auth/github и затем перенаправляется на github для входа.

Шаг 2. Пользователь аутентифицируется, и Github возвращает эту строку и параметр code:

<# extra=# private_gists=0 public_gists=0 public_repos=0 total_private_repos=0 type="User" url="https://api.github.com/users/XXXXX">> info=#> provider="github" uid=13XXXXX>

params[:code] = CODEXXXXXXXXX

Шаг 2. Затем я пытаюсь получить токен, отправив запрос на почту:

https://github.com/login/oauth/access_token

с параметрами: client_id, client_secret и кодом, полученным на шаге 1, но я получаю 404.

Вопрос 1: Правильны ли эти шаги или я что-то упустил?

Вопрос 2: Какие параметры мне нужно сохранить в базе данных для аутентификации после успешного входа (я использую модель User).

Ответы [ 2 ]

6 голосов
/ 11 января 2012

Если вы используете Omniauth, вам нужно просто указать пользователю

"/auth/github"

и затем установите маршрут следующим образом:

match '/auth/:provider/callback', :to => 'sessions#create'
match '/auth/failure', :to => 'sessions#failure'

Omniauth будет обрабатывать все остальное, и вам будет возвращен хеш со всей пользовательской информацией.

Затем, чтобы получить токен доступа, вы должны отправить запрос на почту следующим образом:

POST https://github.com/login/oauth/access_token?
client_id=...&
redirect_uri=http://www.example.com/oauth_redirect&
client_secret=...&
code=...

Я думаю, что вам не хватает redirect_uri, поэтому GitHub перенаправляет, отправляя запрос GET на https://github.com/login/oauth/access_token,, который возвращает ошибку 404.

5 голосов
/ 01 октября 2012

Ну, хотя это действительно глупо, это случилось со мной тоже, и причина была ... Я перепутал client_id с client_secret при копировании и вставил их; -)

Конечный результат такой же, как описано, github отвечает 404. Возможно, это и было «проблемой» этой проблемы; -)

...