Вход в Google через Android с помощью django-rest-auth - PullRequest
0 голосов
/ 05 января 2019

Я пытался добавить Google Sign-In в Android, но у меня есть пара сомнений. Из документации Android Интегрируем гугл, войдите в Android В части аутентификации на стороне сервера требуется Client Id, то есть веб-приложение OAuth 2.0 client ID для вашего внутреннего сервера.

Из документации Android:

Получите идентификатор клиента OAuth 2.0 вашего внутреннего сервера. Если ваше приложение проходит проверку подлинности с помощью внутреннего сервера или обращается к API Google с вашего внутреннего сервера, вы должны получить идентификатор клиента OAuth 2.0, созданный для вашего сервера. Чтобы найти идентификатор клиента OAuth 2.0

Из моего понимания поток будет:

  • Android-приложение получит от Google auth code, которое будет передано бэкэнду.
  • Бэкенд получит access token с auth code из приложения для Android и client secret.
  • С помощью acess token мы получаем информацию о пользователе, а access token сохраняется в базе данных.

Мои сомнения:

  1. Я где-то читал в StackOverflow, что нам нужно создать два клиента OAuth, один для Android и один для веб-приложения. Это правда?
  2. Для входа в Django Rest Auth View необходимо указать один redirect_url, но я не понимаю, что будет redirect_uri в случае устройства Android, или нам нужно пропустить этот URL при получении auth code от Google.
  3. На OAuth Playground я положил client id и client secret своего бэкэнда и получил auth code, и когда я передал это auth code в свой вид входа в систему, я получил redirect_uri_mismatch, но если я поставил redirect_url = 'developer.google.com' Это работает, я думаю, auth code содержит информацию о хосте, откуда она генерируется, поэтому она должна быть такой же, как redirect_url в моем представлении rest-auth, но тогда для android, что это должно быть?

Вот мой Google Login View.

class GoogleLogin(SocialLoginView):
    adapter_class = GoogleOAuth2Adapter
    client_class = OAuth2Client
    callback_url = 'localhost:8000' # What this should be?

Пожалуйста, запросите дополнительную информацию, если я забыл поставить любую.

Я использую это django-rest-auth

Полезная ссылка -

1 Ответ

0 голосов
/ 06 января 2019

Итак, наконец, я понял это, отвечая на мой собственный вопрос, чтобы кто-то мог найти это полезным.

  1. Да, вам нужно два идентификатора клиента: один для вашего устройства Android и один для вашего веб-приложения.
  2. Просто добавьте http://localhost:8000/accounts/google/login/callback/ как callback_url в GoogleLoginView и вставьте то же самое в консоль разработчика Google.
  3. Я точно не знаю, содержит ли код авторизации, сгенерированный Android, какую-либо информацию о хосте или нет, но кажется, что если URL-адрес обратного вызова, который вы добавили в классе представления входа в систему и в консоли разработчика Google, одинаков, он будет работать .

Ваш вид входа в Google должен выглядеть следующим образом.

class GoogleLogin(SocialLoginView):
    authentication_classes = (JSONWebTokenAuthentication,)
    adapter_class = GoogleOAuth2Adapter
    callback_url = 'http://localhost:8000/accounts/google/login/callback/'
    client_class = OAuth2Client

Примечание: callback_url и client_class нужны только в том случае, если вы передаете код авторизации этому представлению, но если вы передаете access_token, тогда callback_url и client_class не нужны.

...