Tengo un proyecto en el que quiero poder usar OpenIDConnect para la administración de sesiones y también poder llamar a servicios usando un encabezado de Autorización. Mi código actual se ve así...
import expressSession from "express-session"; import oidc from "passport-auth0-openidconnect"; import {ensureLoggedIn} from "connect-ensure-login"; getOpenIdMiddleware(){ const verify = (issuer, audience, profile, cb)=> cb(null, profile._json); const oidcAuth0Config = { domain: process.env.AUTH0_DOMAIN, clientID: process.env.CLIENT_ID, clientSecret: process.env.SECRET, callbackURL: process.env.AUTH0_CALLBACK_URL, }; console.log(oidcAuth0Config); passport.use(new oidc.Strategy( oidcAuth0Config, verify, )); this.type = "auth0-oidc"; } this.app.get("/user", ensureLoggedIn(), function(req, res) { console.log(`User is ${JSON.stringify(req.user)}`); res.json(req.user || {}); });
Esto funciona muy bien, pero ahora me gustaría algo que funcione para ambos. Intenté usar simplemente passport.authenticate
. Autenticar como...
this.app.get("/user", passport.authenticate(this.type, { scope: "openid email profile", }), function(req, res) { console.log(`User is ${JSON.stringify(req.user)}`); res.json(req.user || {}); });
Pero eso provoca un bucle indefinido entre /user y /login.
También probé...
const checkAuthentication = (req, res, next)=>{ if(req.isAuthenticated || req.isAuthenticated()){ next(); } else { res.redirect("/login"); } } this.app.get("/user", checkAuthentication, function(req, res) { console.log(`User is ${JSON.stringify(req.user)}`); res.json(req.user || {}); });
pero cuando hago esto req.user
no está definido.
¿Cuál sería un equivalente que funcionaría tanto para la passport-auth0-openidconnect
como para la passport-jwt
?