2012-02-08 5 views
0

私たちはphp/MySQLに既存の会員資格を設定しており、Facebook登録とログインを統合しようとしています。ログインフォームと登録フォームはインポートされ、データベースに新しいユーザーを作成するPHP/MySQLコードに接続されます。しかし、複数のログオン(例えば、1つのサイトログオン、1つのFacebookログオン)を持つ単一のユーザーを防ぐために、メンバーデータベーステーブルに新しい行を追加する前に、ユーザーの電子メールアドレスを確認する必要があります。Facebook regsitration plugin - async validation(email)

これはPHP/MySQLコードで行うことができますが、クロスサイト/ FBメンバーシップのすべての順応を処理しなければならず、FB登録アプリに接続したくないサイトメンバーになることなくより良い解決策は、ユーザーがデータベースに既に存在する電子メールアドレスの下に登録するのを防ぐことです(むしろ、新しいパスワードを取得するように指示し、更新すると、Facebookプロファイルを既存のプロファイルに接続する)。私たちは解決策を探して数週間探しており、Facebook Developers Async Validation(http://developers.facebook.com/docs/plugins/registration/advanced/)やstackexchangeフォーラムに相談してきましたが、これまでになかった電子メールアドレスをデータベースに対して検証するソリューションを実装することができ、それに応じて登録を防止/許可する。

コード我々はこれまでに

//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); 

<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は残念ながら、このプロセスはまったく機能していませんされています。登録フォームは、情報をデータベースに検証したり渡すことなく、無限にハングアップするだけです。私たちは、getJSONとサーバー側のPHPを正しく記述する方法についてかなりの研究を行ってきましたが、レンガの壁に浮かび上がったので、この問題に関する助言や助言を非常に感謝しています。

答えて

2

これはあまりにも遅くはないが、同じ問題に直面した後、私は登録プラグインがプリセットの詳細(名前、電子メール、性別、誕生日)をフォームオブジェクトと共に送信しないことを知った。カスタムフィールド。かなり愚かではありますが、優位または2つの可能性があります。

解決策は、電子メールの説明をオーバーライドして、それがカスタムであると考えられるようにすることでした。あなたの定期的なチェックはチェックされません(有効なメールなど)。それらを手作業で処理する必要があります。

1

これが遅れる場合がありますが、:

あなたは、既存のユーザーのためのFacebookのチェックを使用していた

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

にあなたのJSONアドレスを変更

。変更:あなたは、エラーメッセージが電子メールフィールドの横に表示させたい

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

:へ

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

関連する問題