我們有一個現有的會員網站設置在PHP/MySQL,並期待整合Facebook註冊和登錄。登錄和註冊表單已經被導入,並且被連接到php/MySQL代碼中,從而在數據庫中創建新的用戶。但是,爲了防止有多個登錄的單個用戶(例如,一個站點登錄,一個Facebook登錄),我們需要在向成員數據庫表添加新行之前檢查用戶的電子郵件地址。Facebook的regsitration插件 - 異步驗證(電子郵件)
我們可以通過php/MySQL代碼來做到這一點,但是如果您必須滿足所有跨站點/ FB成員身份的排列,並且我們不希望用戶連接到FB註冊應用程序而不成爲網站會員。更好的解決方案是防止用戶在數據庫中已經存在的電子郵件地址下注冊(而不是指示他們獲得新密碼,並更新連接他們的Facebook配置文件到現有的配置文件)。我們一直在尋找解決方案的周,並且已經諮詢了Facebook開發者異步驗證(http://developers.facebook.com/docs/plugins/registration/advanced/)以及stackexchange論壇,但還沒有能夠實施一種解決方案,該解決方案針對數據庫驗證電子郵件地址,並且相應地阻止/允許註冊。
我們到目前爲止的代碼是
<fb:registration redirect-uri="http://www.mysite.com/register.php"
fields='[{"name":"name"},{"name":"email"}
{"name":"username","description":"Username","type":"text"}]'
onvalidate="validate_async"></fb:registration>
<script src="https://code.jquery.com/jquery-1.4.4.min.js"></script>
<script>
function validate_async(form, cb) {
$.getJSON('http://www.mysite.com/register_check.php/' + form.email + '?callback=?',
function(response) {
if (response.error) {
// Username isn't taken, let the form submit
cb();
}
cb({username: 'That email is taken'});
});
}
</script>
register_check.php
//connect to the database
include 'mysql_connect.php'
$email = $_GET('email');
$data = array();
$sqlCommand = "SELECT * FROM members WHERE email='$email'";
$query = mysql_query($sqlCommand) or die (mysql_error());
$num_rows = mysql_num_rows($query);
if($num_rows>0){
$email_check = $row['email'];
$data['email'] = $email_check;
} else {
$data['error'] = "true";
}
echo json_encode($data);
不幸的是,這個過程是不工作的。登記表只是無休止地掛起來,沒有驗證,也沒有將信息傳遞給數據庫。我們已經對如何正確編寫getJSON和服務器端PHP代碼做了相當多的研究,但是已經碰到了磚牆,所以非常感謝在這個問題上的任何幫助或建議。