You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:36:29