При повторной аутентификации пропущен токен обновления Google - PullRequest
0 голосов
/ 03 октября 2018

Сначала я мог получить refresh token при аутентификации Google, но не смог получить ее при повторной аутентификации.Когда я делаю снова, подтверждение экрана календаря Google также пропускается.следуя этой картинке.

enter image description here

Сначала я мог получить вот так.

{"provider": "google_oauth2", "uid": "XXXXXXXXXXXXXXX " "имя": "XXXXXXXXX", "электронная почта": "XXXXXXXXXXXX", "образ": { "URL": "/ загрузки / пользователь / изображение / 2 / photo.jpg"}, "access_token":" XXXXXXXXX"," refresh_token ":" XXXXXXXXXXXXXXXXXXX "," oauth_expires_at ":" 2018-10-03T08: 20: 22.000Z "," id ": 2," creation_at ":" 2018-10-01T11: 38: 25.422Z ","updated_at": "2018-10-03T07: 20: 23.829Z"}

Но, опять же, refresh_token равно null.

{"поставщик": "google_oauth2", "UID": "XXXXXXXXXXXXXXX", "имя": "XXXXXXXXX", "электронная почта": "XXXXXXXXXXXX", "образ": { "URL": "/ загрузки / пользователь / изображение / 2 / фото.JPG "}," access_token ":" XXXXXXXXX " "refresh_token": нулевой, "oauth_expires_at": "2018-10-03T08: 20: 22.000Z", "идентификатор": 2, "created_at":" 2018-10-01T11: 38: 25.422Z "," updated_at ":" 2018-10-03T07: 20: 23.829Z "}` `` `

user.rb

  def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_initialize.tap do |user|
  user.provider = auth.provider
  user.uid = auth.uid
  user.name = auth.info.name
  user.email = auth.info.email
  user.remote_image_url = auth.info.image
  user.access_token = auth.credentials.token
  user.refresh_token = auth.credentials.refresh_token
  user.oauth_expires_at = Time.at(auth.credentials.expires_at)
  return user
end

end

omniauth.rb

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2,
  Rails.application.credentials.google[:google_client_id],
  Rails.application.credentials.google[:google_client_secret],
  {
    :provider_ignores_state => true,
    image_size: 150,
    scope: %w(https://www.googleapis.com/auth/userinfo.email     https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/calendar).join(' '),
    prompt: 'consent',
    access_type: 'offline'
  }
end

1 Ответ

0 голосов
/ 03 октября 2018

Google не всегда возвращает маркер обновления с веб-учетными данными.Google предполагает, что когда вы запрашивали доступ у пользователя в первый раз, когда вы сохранили токен обновления, он будет использовать его во всех будущих запросах.

Если вы хотите получить токен обновления, перейдите к пользователям google permissions , удалите приложение и затем запросите снова.

Примечание: повторносогласие также может сработать. Не помню, чтобы вы попробовали это.Обратите внимание, что для этого потребуется согласие пользователя на доступ к вашему приложению снова.

...