node.js - playground - Nodemailer/Gmail: ¿qué es exactamente un token de actualización y cómo obtengo uno?
google oauth demo (2)
Para aquellos que han estado buscando un ejemplo de trabajo / fragmento de código, siga la respuesta de Radioreve hasta que pueda obtener el token de acceso y el token de actualización. (Básicamente, vaya al área de juegos, asegúrese de que solicite acceso para enviar correos y mail.google.com, otorgar permiso, cambiar el código de autorización de tokens)
Tenga en cuenta que el tiempo de expires
que ingresé fue una new Date().getTime() + 2000
que estaba cerca de los segundos de vencimiento que se ven en el patio de recreo. No estoy seguro de si tuve que ingresar el token de acceso y la fecha de caducidad con precisión, ya que parece que está refrescando el token automáticamente.
Use este código de muestra escrito en ECMAScript 6:
const user_name = ''[email protected]'';
const refresh_token = '''';
const access_token = '''';
const client_id = '''';
const client_secret = '''';
const email_to = ''[email protected]'';
const nodemailer = require(''nodemailer'');
let transporter = nodemailer
.createTransport({
service: ''Gmail'',
auth: {
type: ''OAuth2'',
clientId: client_id,
clientSecret: client_secret
}
});
transporter.on(''token'', token => {
console.log(''A new access token was generated'');
console.log(''User: %s'', token.user);
console.log(''Access Token: %s'', token.accessToken);
console.log(''Expires: %s'', new Date(token.expires));
});
// setup e-mail data with unicode symbols
let mailOptions = {
from : user_name, // sender address
to : email_to, // list of receivers
subject : ''Hello ✔'', // Subject line
text : ''Hello world ?'', // plaintext body
html : ''<b>Hello world ?</b>'', // html body
auth : {
user : user_name,
refreshToken : refresh_token,
accessToken : access_token,
expires : 1494388182480
}
};
// send mail with defined transport object
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
return console.log(error);
}
console.log(''Message sent: '' + info.response);
});
nodemailer
hacer un formulario de contacto simple en una aplicación de nodo, usando el programador de nodemailer
. Quiero que se envíe todo el mensaje desde una cuenta de Gmail que hice para este fin, a mi correo personal.
en el lado del cliente, todo lo que hago es obtener el nombre / correo / mensaje del cliente y enviarlo al servidor. Funciona bien localmente pero no funciona cuando se implementa (en heroku btw).
Después de una búsqueda rápida, parece que tengo que generar un ClientId
y un ClientSecret
de Google Developers Console, lo cual hice, pero cuando se trata de generar un "token de actualización", estoy completamente perdido.
var smtpTransport = nodemailer.createTransport("SMTP",{
service:"Gmail",
auth:{
XOAuth2: {
user:"[email protected]",
clientId:"",
clientSecret:"",
refreshToken:""
}
}
});
Estoy confundido : ¿qué es exactamente un token de actualización y cómo obtengo uno?
Notas de esta respuesta autor del original:
Entonces, finalmente logré descifrarlo. Me sorprende que no haya podido encontrar más recursos sobre eso, así que para aquellos que necesitan usar
Gmail
conNodemailer
Encontré la respuesta aquí: http://masashi-k.blogspot.fr/2013/06/sending-mail-with-gmail-using-xoauth2.html
Intenta crear un nuevo usuario si ya tienes uno y las cosas no funcionan bien. Fue el caso para mí.
Espero que esto sea útil para alguien,
Aclamaciones
Pregunta 1: ¿Qué es exactamente un token de actualización?
De la documentación encontrada here :
Un token de actualización le proporciona a su aplicación acceso continuo a las API de Google mientras el usuario no está conectado a su aplicación.
(...)
Consideraciones:
Asegúrese de guardar el token de actualización de forma segura y permanente, ya que solo puede obtener un token de actualización la primera vez que realiza el flujo de intercambio de código.
Existen límites en la cantidad de tokens de actualización que se emiten: un límite por combinación de cliente / usuario y otro por usuario en todos los clientes. Si su aplicación solicita demasiados tokens de actualización, puede que se tope con estos límites, en cuyo caso los tokens de actualización anteriores dejan de funcionar.
Consulte también Acceso sin conexión y Uso de un token de actualización .
Pregunta 2: ¿Cómo obtengo uno?
Paso 1: Obtenga credenciales de OAuth 2.0 en Google Developers Console
Como se indica here , usted debe:
- Vaya a Google Developers Console .
- Seleccione un proyecto o cree uno nuevo.
- En la barra lateral a la izquierda, expanda las API y la autenticación . A continuación, haz clic en API . Seleccione el enlace API habilitadas en la sección API para ver una lista de todas sus API habilitadas. Asegúrese de que la "API de Gmail" se encuentre en la lista de API habilitadas. Si no lo ha habilitado, seleccione la API de Gmail de la lista de API (bajo las API de Google Apps), luego seleccione el botón Habilitar API para la API.
- En la barra lateral a la izquierda, selecciona Credenciales .
- Si aún no lo ha hecho, cree las credenciales de OAuth 2.0 de su proyecto haciendo clic en Crear nueva ID de cliente y proporcionando la información necesaria para crear las credenciales.
- Busque la identificación del cliente y el secreto del cliente en la tabla asociada con cada una de sus credenciales.
PAGA ATENCIÓN ESPECIAL PARA especificar
https://developers.google.com/oauthplayground
como un URI de redireccionamiento cuando crea un nuevo usuario en la consola. De lo contrario, tendrá un error.
Paso 2: Obtén el token de actualización en Google OAuth2.0 Playground
- Vaya al área de juegos de Google Oauth2.0 .
- Haga clic en el botón de engranaje en la parte superior derecha. Establezca su ID de cliente y Secreto de cliente obtenido de Google Developers Console , y seleccione Access token location como Authorization header w / Bearer prefix . Cierre esta superposición de configuración.
- Configure los ámbitos. Use
https://mail.google.com/
ya que es el que necesita elnodemailer
. Luego haga clic en el botón Autorizar API .
- Después de la autorización OAuth2.0, cambie el código de autorización para tokens y voilá. tu token de actualización está listo para usar