我使用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
而且我不确定这意味着什么。
答案 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
。