配置Auth0对接Docker本地MySQL数据库:登录脚本填写问题求助
我来帮你搞定Auth0自定义数据库的登录脚本问题,结合你用Docker跑的MySQL环境,给你一个能直接参考的实现方案:
Auth0自定义MySQL数据库登录脚本(适配你的Docker环境)
核心脚本示例
下面是完整的login函数实现,已经适配你提供的MySQL容器配置,你只需要替换少数参数就能用:
function login(email, password, callback) { // 调用Auth0环境内置的数据库和加密模块 const mysql = require('mysql'); const bcrypt = require('bcrypt'); // 数据库连接配置,对应你的Docker容器参数 const connection = mysql.createConnection({ host: '172.0.0.3', // 你给Docker容器指定的固定IP port: 3306, // 容器内部的MySQL端口(不是宿主机映射的13306) user: 'root', password: 'mypasswd', // 你设置的MySQL root密码 database: 'unihub_db' // 替换成你实际使用的数据库名称 }); // 建立数据库连接 connection.connect(function(err) { if (err) { return callback(new Error('数据库连接失败: ' + err.message)); } // 根据邮箱查询用户记录 const query = 'SELECT id, email, password_hash FROM users WHERE email = ?'; connection.query(query, [email], function(err, results) { connection.end(); // 用完连接记得关闭 if (err) { return callback(new Error('查询用户失败: ' + err.message)); } // 没有找到对应用户的情况 if (results.length === 0) { return callback(new Error('用户不存在')); } const user = results[0]; // 对比输入密码和数据库中存储的哈希值 bcrypt.compare(password, user.password_hash, function(err, isValid) { if (err) { return callback(new Error('密码验证失败: ' + err.message)); } if (!isValid) { return callback(new Error('密码错误')); } // 返回Auth0要求格式的用户信息 callback(null, { user_id: user.id.toString(), // Auth0要求user_id必须是字符串类型 email: user.email, // 可选:如果你的用户表有其他字段,比如name,可以在这里添加 // name: user.full_name }); }); }); }); }
关键细节说明
- 数据库连接端口:注意这里用的是容器内部的
3306,不是宿主机映射的13306——因为Auth0的脚本是直接连接容器内的MySQL服务(前提是网络能通)。 - 密码安全:脚本里用
bcrypt验证哈希密码,这是Auth0推荐的安全做法。如果你的数据库里目前存的是明文密码(强烈不建议!),可以临时替换密码验证部分为:
但一定要尽快改成哈希存储的方式,避免泄露用户密码。if (user.password !== password) { return callback(new Error('密码错误')); } - 网络访问权限:Auth0的服务器需要能访问到你的MySQL容器。如果是本地测试,你需要用工具(比如ngrok)把容器的3306端口暴露到公网,或者确保你的网络防火墙允许Auth0的IP段访问你的MySQL服务。
- 错误处理:脚本里覆盖了连接失败、查询失败、用户不存在、密码错误等常见场景,能给前端返回清晰的错误提示。
额外排查点
如果脚本还是无法正常运行,可以检查这几点:
- 确认你的MySQL容器在
unihub-network网络中能被正常访问,比如在宿主机上用mysql -h 172.0.0.3 -P 3306 -u root -p测试连接。 - 确认你的用户表结构正确,包含
id、email、password_hash(或password)字段。 - 检查Auth0自定义数据库配置里的“Login”脚本是否正确保存,有没有语法错误。
内容的提问来源于stack exchange,提问作者gtheo
相关产品推荐
相关产品推荐

