2016-12-05 89 views
1

我使用Auth0作爲登錄服務,但每次通過Auth0註冊一個帳戶時,我都需要將用戶添加到MySQL中的數據庫。如何使用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

我假設你已經通過this tutorial on custom databases所以讓我們來解決你的具體問題。

host: 'localhost'//這是什麼?

此對象的其他屬性定義了連接到您的自定義MySQL數據庫的方式。數據庫需要從Auth0服務器中訪問,因此這需要是可以從Internet訪問的主機名。

"INSERT INTO users SET ?";//這是幹什麼的?

這定義了一個SQL插入命令,它使用?作爲佔位符,用於以後的替換。

如果你看到這個查詢以後使用,你會發現它是一個額外insert對象參數,這將導致上述查詢調用擴展成類似:

INSERT INTO users SET email = '[email protected]', password = 'asdf34ASws' 

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

這散列用戶提供的密碼,以便它不以純文本形式存儲在數據庫中。


如果選擇需要username除了電子郵件,你需要在你的自定義腳本來解決這個問題,因爲我相信默認模板假設只有電子郵件將被使用。

這意味着在數據庫中創建用戶時,您還需要存儲username並在腳本中驗證用戶,您還需要返回username