2013-12-03 4 views
2

현재 firebase 및 angularjs를 사용하는 프로젝트에서 작업 중이며 사용자가 만들려고 할 때마다 이메일이 이미 있는지 확인하려고합니다. 계좌. 여기 사용자 가입 (Angularjs 및 Firebase)

는 HTML 마크 업입니다 :

<div class="well text-center"> 
    <h1 class="text-info"><i class="fa fa-group socio_icon"></i></h1> 
    <h1>Blog title</h1> 
    <p class="lead">Slogan goes here</p> 

    <form name="signup_form" novalidate autocomplete="off"> 
     <p> 
      <div class="input-group input-group-lg" ng-class="{'has-error': signup_form.fullnames.$dirty && signup_form.fullnames.$invalid , 'has-success': signup_form.fullnames.$valid}"> 
       <span class="input-group-addon"><i class="fa fa-user"></i></span> 
       <input type="text" class="form-control" placeholder="Enter full names" name="fullnames" ng-model="signup.form" ng-minlength=5 ng-maxlength=45 required /> 
       <span class="input-group-addon valid" ng-show="signup_form.fullnames.$dirty && signup_form.fullnames.$valid"><i class="fa fa-check-circle text-success"></i></span> 
       <span class="input-group-addon valid" ng-show="signup_form.fullnames.$dirty && signup_form.fullnames.$invalid"><i class="fa fa-exclamation-circle text-warning"></i></span> 
      </div> 
      </p> 

      <p> 
      <div class="input-group input-group-lg" ng-class="{'has-error': signup_form.email.$dirty && signup_form.email.$invalid , 'has-success': signup_form.email.$valid}"> 
       <span class="input-group-addon"><i class="fa fa-envelope-o"></i></span> 
       <input type="email" class="form-control" placeholder="Enter email address" name="email" ng-model="signup.email" ng-minlength=5 ng-maxlength=45 required /> 
       <span class="input-group-addon valid" ng-show="signup_form.email.$dirty && signup_form.email.$valid"><i class="fa fa-check-circle text-success"></i></span> 
       <span class="input-group-addon valid" ng-show="signup_form.email.$dirty && signup_form.email.$invalid"><i class="fa fa-exclamation-circle text-warning"></i></span> 
      </p> 

      <p> 
      <div class="input-group input-group-lg" ng-class="{'has-error': signup_form.password1.$dirty && signup_form.password1.$invalid , 'has-success': signup_form.password1.$valid}"> 
       <span class="input-group-addon"><i class="fa fa-lock"></i></i></span> 
       <input type="password" class="form-control" placeholder="Enter password" name="password1" ng-model="password1" ng-pattern="/(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z])/" ng-minlength=6 ng-maxlength=45 required /> 
       <span class="input-group-addon valid" ng-show="signup_form.password1.$dirty && signup_form.password1.$valid"><i class="fa fa-check-circle text-success"></i></span> 
       <span class="input-group-addon valid" ng-show="signup_form.password1.$dirty && signup_form.password1.$invalid"><i class="fa fa-exclamation-circle text-warning"></i></span> 
      </div> 

      </p> 

      <p> 
      <div class="input-group input-group-lg" ng-class="{'has-error': signup_form.password2.$dirty && signup_form.password2.$invalid , 'has-success': signup_form.password2.$valid}"> 
       <span class="input-group-addon"><i class="fa fa-lock"></i></span> 
       <input type="password" class="form-control" id="password2" name="password2" ng-model="password2" ng-minlength="8" ng-maxlength="20" ng-pattern="/(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z])/" required placeholder="Re-enter password"/> 
       <span class="input-group-addon valid" ng-show="signup_form.password2.$dirty && signup_form.password2.$valid"><i class="fa fa-check-circle text-success"></i></span> 
       <span class="input-group-addon valid" ng-show="signup_form.password2.$dirty && signup_form.password2.$invalid"><i class="fa fa-exclamation-circle text-warning"></i></span> 
      </div> 

     </p> 
     <p> 
     <button type="submit" ng-disabled="signup_form.$invalid" class="btn btn-primary btn-lg btn-block">Singup and enjoy! 
     </button> 
     </p> 
    </form> 
</div> 

와 JS는 다음과 같습니다

'use strict'; 

angular.module('myApp') 
    .controller('MainCtrl', function ($scope) { 

    var ref = new Firebase('https://myfirebase.firebaseio.com/'); 


    }); 
+0

이 도움에 http 될 수 있습니다 : // 블로그 말장난을 용서

은 "요점", 당신은 당신이 사용자를 만들 때마다 인덱스를 만든 다음 그 인덱스를 확인해야한다는 것입니다. mailgun.com/post/free-email-validation-api-for-web-forms/ (이 또한 https://github.com/mailgun/flanker) – renatoargh

+0

감사하지만 내 응용 프로그램은 Angularjs와 Firebase를 기반으로합니다 –

+0

주소가 일부 RFC 사양에서 유효성 검사를하는지 확인할 수 있습니다. 알다시피, @ 및. 및 TLD -하지만 실제로는 확인 전자 메일 만 보내는 것이 유일한 방법입니다. 내 주소 이름 [email protected]에 + 기호가있어 거부 된 경우 항상 나를 귀찮게합니다. 편집 : 죄송합니다, 귀하의 질문을 잘못 읽었습니다. 전자 메일 주소의 고유성을 확인하고 싶습니까? 그냥 사용하는 데이터베이스에 관계없이 쿼리를 수행하십시오. – Simon

답변

4

중포 기지의 레코드의 존재를 확인하기위한 일반적인 방법은 인덱스를 사용하는 것입니다. firebase는 특정 문자가 references에 없으므로 먼저 이메일을 이스케이프 처리해야합니다.

이것은 일반적인 질문이므로 gist showing how to do this이 있습니다.

var fb = new Firebase(URL); 

function isDuplicateEmail(email, callback) { 
    fb.child('email_index/'+escapeEmail(email)).once('value', function(snap) { 
    callback(snap.val() !== null); 
    }); 
} 

function updateUser(user_id, email) { 
    fb.child('user/'+user_id).set({email: email}); 
    fb.child('email_index/'+escapeEmail(email)).set(user_id); 
} 

function escapeEmail(email) { 
    return (email || '').replace('.', ','); 
} 
+0

이 경우에는 email_index에서 제한을 없애야합니까? 누구나 내 응용 프로그램의 전자 메일 목록을 볼 수 있다는 의미입니까? –

+0

Doug이 아니므로 특정 이메일 주소 (예 :'email_index/$ specificemail') 만 읽으면'email_index/'가되지 않습니다. 이것은 특정 이메일 주소가 있는지 만 볼 수 있음을 의미합니다. – Kato

+0

좋아요! 카토 감사합니다! –

관련 문제