Я пытаюсь внедрить Календарь Google в наш веб-проект. После поиска и перепробования почти всех трюков в моей сумке я не смог получить токен обновления после того, как пользователь дал согласие на доступ к календарю. Я хочу получить доступ к календарю пользователя на своем внешнем интерфейсе (токен доступа и токен обновления) и предоставить ему бэкэнд (python) для последующего обновления токена доступа. Попробовав несколько доступных решений, я использую это - В html -
<script src="https://apis.google.com/js/client.js"></script>
В javascript при нажатии кнопки -
gapi.auth.authorize({
client_id: xxx.apps.googleusercontent.com,
client_secret: 'XYZ',
scope: "https://www.googleapis.com/auth/calendar",
immediate: false,
response_type: 'code token',
access_type:'offline',
prompt:'consent'
}, handleAuthResult);
Из этого я могу получить следующий ответ -
{
"token_type": "Bearer",
"access_token": "XXX",
"scope": "email profile openid https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/calendar",
"login_hint": "XXX",
"expires_in": "3559",
"id_token": "XXX",
"session_state": null,
"expires_at": "1597689877",
"code": "4/3XXXXX",
"status": {
"signed_in": true,
"method": "PROMPT",
"google_logged_in": true
},
"g-oauth-window": null,
"client_id": "XXX.apps.googleusercontent.com",
"cookie_policy": "single_host_origin",
"response_type": "code token",
"authuser": "2",
"issued_at": "1597686278"
}
Но по-прежнему нет признаков токена обновления, я попытался обменять код для токена доступа и токена идентификатора с помощью этого API -
let request_params = JSON.stringify({
code: '4/3XXXXX',
client_id: 'XXX.apps.googleusercontent.com',
client_secret: 'XXX',
redirect_uri: 'http://localhost:5000',
grant_type: 'authorization_code'
});
$.ajax({
url: 'https://oauth2.googleapis.com/token',
type: 'POST',
data: request_params,
headers: {
'Content-type': 'application/x-www-form-urlencoded'
},
contentType: "application/x-www-form-urlencoded",
success: (res) => {
console.log(res, 'tokens')
},
error: (error) => {
console.log('An error occurred', error)
}
});
Но это также дает недопустимую ошибку grant_type. Любая помощь приветствуется. Также, пожалуйста, дайте мне знать, если есть какая-либо альтернатива, где я могу напрямую перенаправить с помощью моего сервера, чтобы получить аутентификацию вместо javascript.