Express中动态设置Auth0 BaseURL的问题与解决方法
动态设置Auth0 BaseURL解决Lambda部署问题
问题场景
应用部署至Lambda函数后才能获取BaseURL,且该函数URL由Terraform在Lambda创建后生成,无法提前将其设为环境变量传入Express应用。
尝试过程
尝试通过请求动态设置Auth0配置中的baseurl,虽已在setAuth0BaseURL中间件中设置值,但因异步问题,配置块读取时该值为undefined,不知如何调整。
原尝试代码
const setAuth0BaseURL = (req: Request, res: Response, next: NextFunction) => { const baseURL = `${req.protocol}://${req.get("host")}`; process.env.AUTH0_BASE_URL = `${baseURL}/callback`; next(); }; app.use(setAuth0BaseURL); if (!process.env.LOCAL) { const auth0Config = { authRequired: true, auth0Logout: true, baseURL: process.env.AUTH0_BASE_URL || "http://localhost:3000", clientID: process.env.AUTH0_CLIENTID || "dummyid", issuerBaseURL: process.env.AUTH0_ISSUER_BASE_URL || "http://COMPANY_AUTH0_URL", secret: process.env.AUTH0_SECRET || "dummysecret", }; // Mount the auth middleware app.use(auth(auth0Config)); }
解决方案
基于Mirco的建议,最终可行的实现代码如下:
const setConfig = (req: Request, res: Response, next: NextFunction) => auth({ authRequired: true, auth0Logout: true, baseURL: `${req.protocol}://${req.get("host")}`, clientID: process.env.AUTH0_CLIENTID || "dummyid", issuerBaseURL: process.env.AUTH0_ISSUER_BASE_URL || "http://COMPANY_AUTH0_URL", secret: process.env.AUTH0_SECRET || "dummysecret", })(req, res, next); app.use(setConfig);
内容的提问来源于stack exchange,提问作者Farhani Walid
相关产品推荐
相关产品推荐

