>

등록이 필요한 웹앱을 작성 중입니다. 사용자가 이메일 주소 나 전화 번호로 등록 할 수 있기를 바랍니다. 그런 다음 페이스 북, 트위터, Instagram 등 전화 번호, 이메일 주소 또는 사용자 이름을 사용하여 로그인 할 수 있습니다.

제 질문은 백엔드 데이터베이스에서이 문제를 처리하는 방법입니다. 로그인하는 동안 어떻게 처리합니까? 입력 된 값을 날씨를 이해하는 방법은 전화 번호 또는 이메일 (등록)입니까? 데이터베이스에서 각 사용자마다 고유 한 제약 조건이있는 세 개의 필드가 필요합니까? 아니면 함께 있어야합니까?

많이 감사합니다.


  • 답변 # 1

    1. 고유 제한 조건이있는 데이터베이스의 각 사용자에 대해 세 개의 필드가 별도로 필요합니까? 아마 그렇습니다. 사용자는 선호하는 옵션에 따라 세 가지 옵션 중 하나를 사용할 수 있습니다. 어떤 필드를 제공할지 모르기 때문에 모든 필드는 null을 허용 할 수 있습니다 (즉, 비어있을 수 있음). 그러나 제출 한 모든 값을 확인해야합니다. 이메일 또는 전화 번호 또는 사용자 이름 중 하나만 포함되어 있습니다. 그리고 위의 세 가지 암호와 같은 다른 값이 필요합니다.

    2. 로그인 쿼리에서 처리하는 방법은 무엇입니까? 입력 한 값이 전화 번호 또는 이메일 (등록)임을 이해하는 방법? 정규식은 해당 문제를 해결합니다 (로그인 할 때). 가입 할 때 아래에 간략하게 설명 된대로 옵션을 제공하십시오. 그러나 로그인 할 때 정규식을 사용하여 사용자 이름 또는 phone-no 또는 이메일로 로그인했는지 확인하고 적절한 조치를 취하십시오. 온라인에서 사용중인 언어에 대한 정규식 자습서를 인터넷에서 찾을 수 있습니다.

    설명 웹 응용 프로그램에 대해 이야기하고 있기 때문에 html이 관련되어 있다고 가정합니다. 마크 업으로 사용하는 것이 무엇이든 옵션으로 3 개의 입력 필드가 있어야하며 사용자에게 하나만 충분하다는 것을 알릴 수 있습니다. 즉, 당신은 그들이 전화를 거부하고 싶지 않습니다. 동시에 이메일. 가입시 사용자 이름이 필요하고 선택적으로 로그인에 사용자 이름 및 비밀번호 쌍을 사용하려면 각 사용자 이름이 고유해야합니다. 이 경우 사용자 이름 입력 필드에 입력하여 사용자 이름이 입력되었는지 확인한 후 데이터베이스를 쿼리해야합니다. 이것은 Ajax를 사용하여 달성 할 수 있습니다 온라인으로 아약스 튜토리얼을 찾을 수 있습니다. 가져 오면 알려주고 제출을 중지하지만 실패하면 계속 진행할 수 있습니다. 위에서 언급 한 바와 같이, 사용자는 사용자 이름이나 전화 번호 또는 이메일 주소 만 제공 할 수 있지만 둘다는 제공 할 수 없음을 알려야합니다. 필드 바로 위에 '또는'을 포함하면됩니다. 값 중 하나만 입력하도록하려면 옵션 필드에 입력을 시작했을 때 캡처해야하므로 한 필드에 입력을 시작한 경우 다른 두 필드를 비활성화하거나 숨길 수 있습니다. 이 특정 솔루션을 사용하면 정규 표현식이 필요하지 않으며 어떤 유형의 값을 제공하는지 결정하는 데 도움이되는 속성 만 포함하면됩니다.

    <form class="form-inputs">
        <div class="unique-options">
            <span> Phone No </span>
            <input class="opts" id="phone-no" type="phone">
            <span> Or email </span>
            <input class="opts" id="email-address" type="email">
            <span> Or username </span>
            <input class="opts" id="username" type="email">
        </div>
        <span> Password </span>
        <input type="password" id="psw-input">
        <button type="submit" id="submit-btn">Submit</button>
    </form>
    
    

    자바 스크립트를 사용하여 그들이 제공하는 가치를 결정하십시오. 여기 jquery를 사용하고 있습니다

    var valueType,ph,em,usrn,passw;
    ph = $("#phone-no");
    em = $("#email-address");
    usrn = $("#username");
    passw = $("#password").val();
    $("input.opts").keyup(function(e){
       
       /* If they've begun typing in one input field, hide the rest two */
        
        valuType = $(e.target).attr("id");
        if(valueType == "phone-no"){
            em.prev.hide();
            usrn.prev.hide();
            em.hide();
            usrn.hide();
        } else if(valueType == "email-address"){
             ph.prev.hide();
             usrn.prev.hide();
             ph.hide();
             usrn.hide(); 
        } else if(valueType == "username"){
            em.prev.hide();
            ph.prev.hide();
            em.hide();
            ph.hide();
        }
    )};
    $("#submit-btn").click(function(e){
        $(e).preventDefault();
        
        /*
        * I assume you have three separate scripts on the server
        * to handle the query
        * for each three inputs you are expecting 
        */
        if(valueType == "phone-no"){
            $.post( 'http://script-that-inserts-into-phone-no-field',
    		        data: {phone: valueType, password: passw},
    		        function(data) {
    			   
    		        },"text/html"
    		    );
        } else if(valueType == "email-address"){
            $.post( 'http://script-that-inserts-into-email-field.extension',
    		        data: {email: valueType, password: passw},
    		        function(data) {
    			   
    		        },"text/html"
    		    );    
        } else if(valueType == "username"){
            $.post( 'http://script-that-inserts-into-username-field.extension',
    		        data: {username: valueType, password: passw},
    		        function(data) {
    			   
    		        },"text/html"
    		    );
        }
    });
    
    

    이렇게하면 서버 측 스크립트를 사용하여 value-type이 phone-no인지 확인할 수 있습니다. phone-no 열에 사용자가 제공 한 값을 다른 두 열 (email&username)이 널로 남겨둔 상태로 입력하십시오 (해당 행).
    마크 업 요소에 속성 및 값을 첨부하고 서버에서 값을 검색하는 방법을 알고 있는지 확인하는 경우가 있습니다. 때로는 Javascript를 사용하여 유용한 필드를 캡처하고 해당 값을 서버에 제출하는 것이 우아 할 수 있습니다.

    사용중인 서버 측 언어에 대해 아무 것도 말하지 않았으므로이 게시물은 언어별로 다릅니다.

    스크립트에 제출하고 위와 같이 각 경우를 처리하기위한 여러 스크립트를 갖기 전에 사용자가 제공하는 값 유형을 결정하려는 대신 값을 하나의 스크립트에 제출하면됩니다. 그러나이 하나의 스크립트에는 세 개의 변수에 세 개의 쿼리가 저장되어 있어야하며 사용하는 쿼리 변수는 수신 된 valueType의 값에 따라 결정됩니다.  사용중인 서버 측 언어를 모르겠습니다. 포함 할 수있었습니다.

    이것은 여러분이 생각할 수있는 것에 대한 아이디어를 제공하기위한 것이며이 솔루션을 사용하는 경우 코드가 테스트되지 않았지만 예상대로 작동해야합니다.

  • 답변 # 2

    SQL 쿼리가이를 가능하게합니다. 방법은 다음과 같습니다.

    <label>Username / E-Mail</label>
    <span style="line-height: 1.5em;"><input type="text" name="login" /></span>
    
    

    테이블

    CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `username` text NOT NULL,
    `email` text NOT NULL,
    `password` text NOT NULL,
    `psalt` text NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    
    

    사용자가 사용자 이름이나 이메일을 입력 한 경우 로그인 시스템이 승인해야하므로 SQL 쿼리는 이와 유사합니다

    SELECT id,password,psalt FROM users WHERE (username=:login OR email=:login) AND password=:pass
    
    

    그리고 나머지는 알고있다

관련 자료

  • 이전 python - 보케 플롯 크기를 동적으로 맞추는 방법
  • 다음 PHP Cassandra Timeuuid 생성자가 정수 한계에 도달했습니다 (32 비트)