¿Cómo puedo verificar que una solicitud viene en https en express?

Quiero forzar ciertas rutas para usar siempre una conexión segura en mi aplicación Express. ¿Cómo puedo verificar para asegurarme de que está usando https?

Estoy usando piggyback ssl en heroku para mis implementaciones.

También despliego en Heroku. Agregan un montón de sus encabezados cuando usan nginx para revertir el proxy. El de interés en este caso sería x-forwarded-proto.

Esto es lo que hice:

app.get(/\/register$/, function(req, res){ console.log(JSON.stringify(req.headers)); //to see all headers that heroku adds if(req.headers['x-forwarded-proto'] && req.headers['x-forwarded-proto'] === "http") { res.redirect("https://" + req.headers.host + req.url); } else { //the rest of your logic to handle this route } }); 

app.enable (‘proxy de confianza’);

“Usar Express detrás de un proxy inverso como Varnish o Nginx es trivial, pero requiere configuración. Al habilitar la configuración de” proxy de confianza “a través de app.enable (‘proxy de confianza’), Express sabrá que está detrás de un proxy y que los campos de encabezado X-Forwarded- * pueden ser confiables, que de otra manera pueden ser fácilmente falsificados “.

Expresar detrás de los proxies doco

Para ejecutar un servidor seguro (https) debería crearse independientemente de un servidor no seguro (http). También escucharían en puertos separados. Intenta algo como esto:

 var express = require('express) , app_insecure = express.createServer() , app_secure = express.createServer({ key: 'mysecurekey' }) app_insecure.get('/secure-page',function(req, res){ // This is an insecure page, redirect to secure res.redirect('https://www.mysecuresite.com/secure-page') }) app_secure.get('/secure-page', function(req,res){ // Now we're on a secure page }) app_insecure.listen(80) app_secure.listen(443) 

O esto podría ser implementado como middleware de ruta

 var redirect_secure = function(req, res, next){ res.redirect('https://mysite.com' + req.url) } app_insecure.get('/secure-page',redirect_secure,function(req, res){}) 

Ahora solo tendría que incluir la referencia de la función: redirect_secure () en las rutas que desea redirigir a una ubicación segura.