Я обновляю учетные записи, чтобы использовать новую область действия plus.login
, поэтому я протестировал добавление пользователя только с областью действия userinfo
, а затем повторный вход в систему с добавлением plus.login
. В результате была введена новая запись в авторизованной панели доступа, а токен доступа, возвращенный из последнего вызова, имел только разрешение userinfo
. Я проверил это, выполнив проверенный вызов токена, а также попытавшись составить список людей.
Является ли это ожидаемым поведением, и если да, то должен ли я заранее отозвать старый токен? Я вижу, что это возможно с действием /revoke
. Удаление токена Oauth на стороне сервера
Обновление: актуальная суть. Это использует драгоценный камень Ruby Omniauth. На самом деле я не уверен, как пользователь может когда-либо видеть более 1 записи в авторизованной панели доступа, но в данном случае я мог видеть 2. И после вчерашнего тестирования различных сценариев у меня было около 6 записей. все принадлежат одному и тому же приложению! Обратите внимание, что я никогда не менял идентификатор клиента, и на самом деле у меня есть только один идентификатор клиента.
Я надеюсь, что описанную мной ситуацию смогут повторить другие; это просто вопрос взлома URL-адреса на стороне Google, чтобы удалить область plus.login, а затем снова войти в систему, сохранив URL-адрес как есть.
Обновление (2): я также обнаружил эту ошибку: "Вы не должны запрашивать информацию о пользователе. profile или plus.me в сочетании с этой областью действия, поскольку они неявно включены и создадут запутанный диалог разрешений для вашего пользователя». На самом деле, это больше, чем просто проблема с разрешениями UX; кажется, что Google на самом деле не будет хранить область «plus.me» для пользователя, поэтому это означает, что он всегда будет показывать диалоговое окно разрешений OAuth, даже если пользователи уже предоставили разрешения (я думаю, потому что он выполняет простую проверку на равенство и замечает плюс .me запрашивается, но не сохраняется против пользователя).
Обновление (3): ошибка с использованием неправильного входа в систему была вызвана тем, что мой код делал что-то вроде user.login || user.signup без обновления данных токена при входе в систему. Итак, теперь он обновляет токен доступа и токен обновления после каждого входа в систему. (Я до сих пор не понимаю, почему для каждой комбинации клиент-пользователь должно быть более одного токена.)