Для того, щоб отримати те, 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 (тобто ви не використовуєте це для входу / автентифікації) .