Cuando se crea un sistema de login con Devise todo funciona perfecto salido de la caja excepto el recuperar contraseñas, la razón es muy sencilla, esto se hace via email y para que rails pueda enviar un email necesita tener un sender (enviador) configurado, este modulo en rails 4 recibe el nombre de
Action Mailer.
Configurando action_mailer para enviar correos con gmail
para hacerlo basta abrir el archivo de configuración config/application.rb (también es posible ocupar un initializer) y agregar las siguientes líneas dentro del module y de class Application.
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.default :charset => "utf-8"
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:authentication => :plain,
:domain => 'gmail.com',
:user_name => ENV['email'],
:password => ENV['email_password'],
}
donde dice ENV[‘email’] y password podemos cambiarlas por nuestras claves de email y al reiniciar la aplicación ya estaría funcionando pero hay un problema grande con hacer eso, estaríamos dejando las claves del correo electrónico dentro de nuestro código.
Además hoy en día gmail no soporta utilizar el password directamente desde una aplicación, para crear un password exclusivo para nuestra app debemos ir a: https://security.google.com/settings/security/apppasswords y crear un passowrd para nuestra aplicación.
Protegiendo las claves con dot-env
Dot-env es una gema que nos permite agregar variables de entorno de forma sencilla a nuestra aplicación, para eso vamos agregar la siguiente gema al gemfile
gem 'dotenv-rails'
luego tenemos que crear un archivo .env (si, el punto es parte del nombre) dentro de la raíz de nuestro proyecto, en el vamos a agregar las variables de entorno.
[email protected]
email_password=tuppassword
y ya con eso nuestra aplicación permite recuperar las claves del usuario desde el sign_in.
Evitando adjuntar el archivo .env por error al repositorio
Ahora debemos de asegurarnos de no adjuntar este archivo por error cuando hagamos un commit, para eso vamos a abrir el archivo .gitignore (esto sólo aplica si están ocupando GIT)
/.env
Configurando Heroku para que acepte las variables de entorno
Si ocupas Heroku te estarás preguntando como pasar el archivo .env si no está en el repositorio, el secreto es que no se pasa, vamos a ocupar la terminal para dar los valores de las variables de entorno.
Entonces desde la terminal dentro de la carpeta del proyecto, escribimos:
heroku config:set [email protected]
heroku config:set email_password=tupassword
y ahora si que si, tus claves están seguras y tu aplicación está funcionando con la opción de recuperar contraseñas.
Gonzalo Sánchez
Artículos relacionados
5 Comentario
Deja una respuesta
Recibe los artículos más leidos y beneficios especiales de nuestra academia
Empieza a trabajar en los roles digitales mejor pagados
Fórmate de manera práctica, e intensiva, con sesiones en vivo de forma flexible y efectiva. Te acompañamos desde que partes hasta que encuentras trabajo.
Muy bueno, gracias!
[…] (Si quieren, pueden realizar este paso de una forma más segura en el tutorial que les enseña Gonzalo en el siguiente link http://blog.desafiolatam.com/recuperar-contrasenas-con-devise-y-gmail/) […]
Cuando probé el mail de recuperación me llega. Pero Dónde puedo editar ese mail y la url de redirección? porque me manda a http://localhost:3000/users/password/edit?reset_password_token=XXXXXXXXX
Lo probé y me arrojaba el mismo error, busca en el aplication.rb y en vez de localhost:3000 agrega la de tu proyecto en heroku
Gracias, lo voy a revisar. Se supone que había hecho ese cambio