Как получить токен доступа из OAuth, используемого в действии Google для умного дома
Для своего умного домашнего действия я использовал поддельную аутентификацию, как показано в приложении codelab- smartwasher. (Для целей тестирования). Приложение работает нормально. Я создал свой собственный код для работы с моими устройствами (коммутаторами). Теперь, когда я реализую OAuth, который использует мой собственный сервер OAuth. Я не могу понять, как реализовать это в моем коде. OAuth работает по мере необходимости, когда я тестировал. Но я хочу помочь в интеграции его с действиями Google. У меня проблема с получением токена доступа. Код выглядит следующим образом:
exports.fakeauth = functions.https.onRequest((request, response) => {
const responseurl = util.format('%s?code=%s&state=%s',
decodeURIComponent(request.query.redirect_uri), request.query.code,
request.query.state);
console.log('*********'+responseurl);
return response.redirect(responseurl);
});
exports.faketoken = functions.https.onRequest((request, response) => {
const grantType = request.query.grant_type
? request.query.grant_type : request.body.grant_type;
const secondsInDay = 86400; // 60 * 60 * 24
const HTTP_STATUS_OK = 200;
console.log(`Grant type ${grantType}`);
let obj;
if (grantType === 'authorization_code') {
obj = {
token_type: 'bearer',
access_token: '123access',
refresh_token: '123refresh',
expires_in: secondsInDay,
};
} else if (grantType === 'refresh_token') {
obj = {
token_type: 'bearer',
access_token: '123access',
expires_in: secondsInDay,
};
}
response.status(HTTP_STATUS_OK)
.json(obj);
console.log('********** TOKEN **********',response);
});
Приведенный выше код выполняется с поддельной аутентификацией. Почему не выполняется, когда я внедряю пользовательский OAuth? Нужно ли вносить какие-либо изменения в clienID и секретный код в firebase? Как получить токен доступа, возвращенный OAuth?
Пожалуйста, помогите. Я новичок в node.js.
1 ответ
Код авторизации, который будет возвращаться в запросах, будет находиться в заголовке как поле авторизации. Вот способ вытащить его с помощью Node.js.
function getToken(headers) {
// Authorization: "Bearer 123ABC"
return headers.authorization.substr(7);
}