我们在php / MySQL中有一个现有的会员网站设置,并且正在寻求整合Facebook注册和登录。登录和注册表单已导入,并连接到php / MySQL代码,该代码在数据库中创建新用户。但是,为了防止单个用户进行多次登录(例如,一次站点登录,一次Facebook登录),我们需要在向成员数据库表添加新行之前检查用户的电子邮件地址。
我们可以通过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进行了大量研究,但是遇到了问题,所以非常感谢有关此问题的任何帮助或建议。
答案 0 :(得分:2)
我希望这还不算太晚,但在遇到同样的问题后我发现注册插件不会随表单对象发送预设的详细信息(名称,电子邮件,性别,生日) - 只发送任何自定义领域。相当愚蠢的imo,但可能有一两个优势。
解决方案是覆盖电子邮件的描述,以欺骗它认为它是自定义的(它会是) - 不利于你的常规检查不会被检查(有效的电子邮件等)所以你需要手动照顾这些。
答案 1 :(得分:1)
这可能会迟到,但是:
将您的JSON地址更改为
http://www.mysite.com/register_check.php?email=' + form.email +
您正在使用facebook检查现有用户。变化:
cb({username: 'That email is taken'});
为:
cb({email: 'That email is taken'});
您希望错误消息显示在电子邮件字段旁边。