Я создаю серверное приложение, которое проверяет почтовый ящик office365 и в соответствии с полученными на него электронными письмами предпринимает определенные действия.
Потому что office365 требует, чтобы я подключился через веб-интерфейс для получения токена.
Таким образом, я генерирую взаимодействие через Интернет, а затем беру токен и использую его в cronjob, чтобы продолжить просматривать его каждый раз.
Примерно через 50 минут программа выдаст следующую ошибку.
(node:1270) UnhandledPromiseRejectionWarning: Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:491:11)
at ServerResponse.setHeader (_http_outgoing.js:498:3)
at ServerResponse.res.set.res.header (/mnt/c/Users/gcontreras/Desktop/proyectos/testing-outlook/node_modules/express/lib/response.js:524:10)
at ServerResponse.res.cookie (/mnt/c/Users/gcontreras/Desktop/proyectos/testing-outlook/node_modules/express/lib/response.js:608:8)
at saveValuesToCookie (/mnt/c/Users/gcontreras/Desktop/proyectos/testing-outlook/helpers/auth.js:52:7)
at Object.getAccessToken (/mnt/c/Users/gcontreras/Desktop/proyectos/testing-outlook/helpers/auth.js:101:5)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
(node:1270) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 40)
Ошибка в этой части кода:
Centos 7, работает nodejs 8.10 с экспресс-версией 4.0
if (refresh_token) {
const newToken = await oauth2.accessToken.create({refresh_token: refresh_token}).refresh();
saveValuesToCookie(newToken, res);
return newToken.token.access_token;
}
, которая относится к этой функции:
function saveValuesToCookie(token, res) {
// Parse the identity token
const user = jwt.decode(token.token.id_token);
// Save the access token in a cookie
res.cookie('graph_access_token', token.token.access_token, {maxAge: (365 * 24 * 60 * 60 * 1000), httpOnly: true});
// Save the user's name in a cookie
res.cookie('graph_user_name', user.name, {maxAge: (365 * 24 * 60 * 60 * 1000), httpOnly: true});
// Save the refresh token in a cookie
res.cookie('graph_refresh_token', token.token.refresh_token, {maxAge: (365 * 24 * 60 * 60 * 1000), httpOnly: true});
// Save the token expiration time in a cookie
res.cookie('graph_token_expires', token.token.expires_at.getTime(), {maxAge: (365 * 24 * 60 * 60 * 1000), httpOnly: true});
}
Вначале я думал, что если я изменю максимальное время до истечения срока действия значений в файле cookie, он будет работать, чтобы не потерять токен обновления, но не результаты.
Я думаю, что это не лучший способ проверить почтовый ящик, но это единственный, который пришел мне в голову. Как будто я готов изменить это, если они знают лучший способ сделать это.