Зеркало GAE Glass, создающее несколько входов oauth для каждого пользователя

Я создал приложение Glass на Python. Я начал с быстрого запуска зеркала для Python, и мое приложение работает нормально, за исключением того, что некоторые пользователи получают несколько уведомлений. У меня есть только одна строка для каждого пользователя в моей таблице учетных данных, однако, когда я иду и смотрю на свой авторизованный доступ в своей учетной записи, я вижу, что мой проект Glass указан 8 раз.

Может ли кто-нибудь сказать мне, как проверить и посмотреть, предоставил ли пользователь ранее доступ к моему приложению при входе в систему, и если да, то пропустите создание нового токена.


person marty331    schedule 03.12.2013    source источник


Ответы (1)


Вы можете использовать идентификатор пользователя, чтобы предотвратить хранение более одного удостоверения для каждого пользователя.

Когда вы завершите поток OAuth, вы получите токен идентификатора вместе с токенами доступа и обновления. Если вы расшифруете этот токен, вы увидите что-то вроде этого:

{
  "iss":"accounts.google.com",  
  "at_hash":"HK6E_P6Dh8Y93mRNtsDB1Q",  
  "email_verified":"true",  
  "sub":"10769150350006150715113082367",
  "azp":"1234987819200.apps.googleusercontent.com",        
  "email":"[email protected]",  
  "aud":"1234987819200.apps.googleusercontent.com",  
  "iat":1353601026,  
  "exp":1353604926 
}

Ключ sub — это тот, который вас интересует. Используйте это значение для уникальной идентификации вашего пользователя. Если вы видите, что пользователь аутентифицируется с уже известным вам идентификатором пользователя, замените старое значение.

Если вы обновите свой вопрос, включив в него код, который вы используете для потока OAuth, мы сможем дать более конкретный совет. Вы также можете узнать больше об этом из документации Google по OAuth.

person mimming    schedule 03.12.2013
comment
Я понял свою проблему. Я использовал пакетную обработку для отправки уведомлений своей группе пользователей, однако я объявлял batch_responses = _BatchCallback() batch = BatchHttpRequest(callback=batch_responses.callback) вне моего цикла идентификатора пользователя. Затем был вызов batch.add(xxx), который, по сути, складывал все добавления в одно и то же пакетное объявление. Таким образом, каждый дополнительный пользователь получал дополнительное уведомление. Я решил, объявив пакет = '' после выполнения моего пакета. - person marty331; 05.12.2013