Плагин регистрации Facebook - асинхронная проверка (электронная почта) - PullRequest
0 голосов
/ 08 февраля 2012

У нас уже есть настроенный сайт членства в 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 на стороне сервера, но столкнулись с кирпичной стеной, поэтому будем очень признательны за любую помощь или совет по этому вопросу.

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Надеюсь, это еще не слишком поздно, но, столкнувшись с той же проблемой, я обнаружил, что регистрационный плагин не отправляет с объектом формы заданные данные (имя, адрес электронной почты, пол, день рождения) - только отправляет любые пользовательскиеполя.Довольно глупо, но у него может быть одно или два преимущества.

Решение состояло в том, чтобы переопределить описание электронного письма, чтобы обманным путем заставить его думать, что оно является обычным (что было бы) - недостатком является то, что ваши регулярные проверки не будутпроверьте (действительный адрес электронной почты и др.), поэтому вам придется позаботиться об этом вручную.

1 голос
/ 15 мая 2012

Это может быть поздно, но:

Измените свой адрес JSON на

http://www.mysite.com/register_check.php?email=' + form.email + 

Вы использовали чек Facebook для существующего пользователя. Изменения:

cb({username: 'That email is taken'}); 

до:

cb({email: 'That email is taken'}); 

Вы хотите, чтобы сообщение об ошибке появилось рядом с полем электронной почты.

...