Как с помощью Omniauth просмотреть репозитории пользователя, который входит в систему с помощью Github?
-
20-12-2019 - |
Вопрос
Я настроил Omniauth в своем приложении Rails 4, чтобы позволить пользователю войти в систему с помощью Github.
Эта часть работает нормально.
Теперь я хотел бы перечислить репозитории этого пользователя (я запрашиваю область действия repo
когда просишь пользователя авторизовать мое приложение.
Я много гуглил, но не понимаю, как это сделать.
Может ли кто-нибудь сказать мне, как я могу использовать существующую аутентификацию для получения списка репозиториев моего пользователя?
Решение
Ну, OmniAuth — это просто гибкая библиотека аутентификации.Его единственная цель — аутентификация пользователей.Любое пользовательское поведение, которое вы желаете, должно быть реализовано либо вами, либо другим драгоценным камнем.
Вы можете добиться того, чего хотите, просто используя Хорошо документированный API GitHub:
# callbacks_controller.rb
require "open-uri"
require "json"
omniauth = env['omniauth.auth']
repositories_json = open(omniauth.extra.raw_info.repos_url,
"Accept" => "application/vnd.github.v3+json",
"Authorization" => "token #{omniauth.credentials.token}"
).read
repositories = JSON.parse(repositories_json)
Если это все, что вам нужно, то обязательно используйте это.Если у вас есть другие требования, кроме этого, возможно, вам стоит взглянуть на драгоценный камень github.
Кроме того, вам следует использовать только область repo
если вы хотите получить доступ к частным репозиториям ваших пользователей.А запрос доступа к личным репозиториям пользователя немного навязчив, поэтому не делайте этого легкомысленно.
Если вы действительно хотите получить доступ к личным репозиториям пользователя, вам нужно добавить ?type=all
до конца repos_url.Итак, вам придется сделать что-то вроде:
open("#{omniauth.extra.raw_info.repos_url}?type=all" ... )