Для того, щоб отримати те, refresh_tokenвам потрібно включити access_type=offlineв URL-адресу запиту OAuth. Коли користувач вперше засвідчить автентифікацію, ви отримаєте назад ненульовий показник refresh_token, а також access_tokenтермін дії, який закінчується.
Якщо у вас виникає ситуація, коли користувач може повторно засвідчити обліковий запис, для якого ви вже маєте маркер аутентифікації (наприклад, @SsjCosty згадується вище), вам потрібно повернути інформацію від Google, для якого облікового запису використовується маркер. Для цього додайте profileдо своїх областей. Використовуючи дорогоцінний камінь OAuth2 Ruby, ваш остаточний запит може виглядати приблизно так:
client = OAuth2::Client.new(
ENV["GOOGLE_CLIENT_ID"],
ENV["GOOGLE_CLIENT_SECRET"],
authorize_url: "https://accounts.google.com/o/oauth2/auth",
token_url: "https://accounts.google.com/o/oauth2/token"
)
# Configure authorization url
client.authorize_url(
scope: "https://www.googleapis.com/auth/analytics.readonly profile",
redirect_uri: callback_url,
access_type: "offline",
prompt: "select_account"
)
Зауважте, що в області застосування є дві записи з обмеженим простором, одна для доступу лише до Google Analytics, а інша - лише profileстандарт OpenID Connect.
Це призведе до того, що Google надасть додатковий атрибут, викликаний id_tokenу get_tokenвідповіді. Щоб отримати інформацію з id_token, перегляньте цю сторінку в документах Google. Існує кілька бібліотек, наданих Google, які підтвердять та "розшифрують" це для вас (я використав дорогоцінний камінь Ruby google-id-token ). Після того, як ви розберете його, subпараметр фактично є унікальним ідентифікатором облікового запису Google.
Варто зазначити, що якщо ви зміните область застосування, ви знову отримаєте маркер оновлення для користувачів, які вже пройшли автентифікацію на оригінальну область. Це корисно, якщо, скажімо, у вас вже є маса користувачів і не хочете змушувати їх скасовувати додаток у Google.
О, і остання примітка: вам це не потрібно prompt=select_account , але це корисно, якщо у вас виникне ситуація, коли ваші користувачі можуть захотіти автентифікувати більше ніж один обліковий запис Google (тобто ви не використовуєте це для входу / автентифікації) .