Мы используем Google App Engine для размещения кода на стороне сервера и веб-приложения.Сервер используется для обработки Google Auth и доступа к календарям.Он использует поток аутентификации на стороне сервера, генерируя токен авторизации от клиента и отправляя его на сервер для обмена на токены.
Это хорошо работает при запуске нашего клиента с нашего локального хоста, но когда мы запускаем через тот же потокпри использовании живого клиента появляется ошибка unauthorised_client.
Мы объявили домены как на стороне сервера, так и на стороне клиента в разделе учетных данных, используя как пользовательские домены, так и изначально созданные пути Google App Engine.
Код на стороне сервера с использованием экспресс.Очевидно, мы отключили наши клиентские ключи.
var express = require('express');
var router = express.Router();
const {google} = require('googleapis');
router.post('/', function(req, res, next) {
const oauth2Client = new google.auth.OAuth2(
"CLIENT_ID",
"CLIENT_SECRET",
"postmessage"
);
var code = req.body.code
var userId = req.body.userId
oauth2Client.getToken(code).then(resp => {
if (resp.tokens) {
let tokens = resp.tokens
res.json({status: "success"})
} else {
res.json({status: "failed"})
}
}).catch(error => {
console.log(error)
res.json({status: "failed", error: error.message})
})
})
module.exports = router;
Код на стороне клиента: Angular 5+ ng-gapi для загрузки API Google.
public getGoogleAuth(): Promise<any> {
return new Promise(resolve => {
this.googleAuth.getAuth().subscribe(auth => {
resolve(auth)
})
});
}
async googleSignIn() {
try {
let auth = await this.getGoogleAuth()
let { code } = await auth.grantOfflineAccess({
'redirect_uri' : 'postmessage',
scope: "https://www.googleapis.com/auth/calendar.readonly https://www.googleapis.com/auth/calendar"
})
} catch(error) {
console.log(error)
return Promise.reject(error);
}
}