如何使用Auth0的自定义数据库将用户添加到MySQL数据库?

时间:2016-12-05 20:09:28

标签: mysql database-connection auth0

我使用Auth0作为登录服务,但每次通过Auth0注册帐户时,我都需要将用户添加到MySQL中的数据库。

他们提供以下脚本模板,但我是新手,需要帮助调试和理解它。我的具体问题详细说明如下:

function create(user, callback) {

  var connection = mysql({
    host: 'localhost', //what should this be?
    user: 'KNOWN/Understood',
    password: 'KNOWN/Understood',
    database: 'KNOWN/Understood'
  });

  connection.connect();

  var query = "INSERT INTO users SET ?"; //what does this do?

  bcrypt.hash(user.password, 10, function (err, hash) { //what does this do?
    if (err) { return callback(err); }
    var insert = {
      password: hash,
      email: user.email
    };
    connection.query(query, insert, function (err, results) {
      if (err) return callback(err);
      if (results.length === 0) return callback();
      callback(null);
    });
  });
}

我还需要为此脚本更改还是了解或调用才能使其正常工作?

我经常收到错误missing username for Database connection with requires_username enabled而且我不确定这意味着什么。

1 个答案:

答案 0 :(得分:0)

我假设你已经完成this tutorial on custom databases所以让我们解决你的具体问题。

  

host: 'localhost' //这应该是什么?

此对象的此属性和其他属性定义了连接到自定义MySQL数据库的方式。需要从Auth0服务器中访问数据库,因此这需要是可从Internet访问的主机名。

  

"INSERT INTO users SET ?"; //这是做什么的?

这定义了一个SQL插入命令,该命令使用?作为占位符以供以后替换。

如果您看到以后使用此查询的位置,您会注意到它使用额外的insert对象参数调用,该参数将导致上述查询扩展为:

INSERT INTO users SET email = 'user@example.com', password = 'asdf34ASws'
  

bcrypt.hash(user.password, 10, function (err, hash) //这是做什么的?

这会破坏用户提供的密码,使其不以纯文本形式存储在数据库中。

如果您选择除了电子邮件之外还需要username,则需要在自定义脚本中解决此问题,因为我相信默认模板会假设只会使用电子邮件。

这意味着在数据库中创建用户时,您还需要存储username并在脚本中验证用户还需要返回username