2014-03-03 2 views
1

"Accounts.onCreateUser"함수에서 서버 측 유효성 검사를 수행하므로 옵션 객체도 전달할 수 있습니다. 필자는 사용자 기능의 유효성 확인을 통해이를 수행하는 방법을 파악할 수 없었습니다.Meteor - 암호에 서버 측 유효성 검사 사용 방법

잘못된 방향으로 가고 있다면 우선 완전히 열립니다. 조언을 바랍니다. 서버 측 암호 길이를 확인하는 방법을 알 수 없습니다. 그것은 창조 이전에 이미 변환 되었기 때문입니까? 테스트 할 때 암호로 단일 문자를 입력해도 오류가 발생하지 않습니다.

Accounts.onCreateUser(function (options, user) { 
    if (options.profile) { 
     user.profile = options.profile; 
     user.profile.user_status = "new user"; 
    } 

    // Error checking 
    var errors = ""; 
    if (user.username.length === 0) { 
     errors = errors + '<li>Email is required</li>'; 
    } 
    if (user.username.length !== 0 && user.username.length < 4) { 
     errors = errors + '<li>Email too short</li>'; 
    } 

    if (user.profile.firstname.length === 0) { 
     errors = errors + '<li>First name is required</li>'; 
    } 

    if (user.profile.firstname.length !== 0 && user.profile.firstname.length < 2) { 
     errors = errors + '<li>First name is too short</li>'; 
    } 

    if (user.profile.lastname.length === 0) { 
     errors = errors + '<li>Last name is required</li>'; 
    } 
    if (user.profile.lastname.length !== 0 && user.profile.lastname.length < 2) { 
     errors = errors + '<li>Last name is too short</li>'; 
    } 

    if (user.services.password.length === 0) { 
     errors = errors + '<li>Please enter a password</li>'; 
    } 

    if (user.services.password.length < 7) { 
     errors = errors + '<li>Password requires 7 or more characters</li>'; 
    } 

    if (errors) { 
     throw new Meteor.Error(403, errors); 
    } else { 
     return user; 
    } 

}); 

저는 Accounts-ui를 사용하지 않습니다. 내 자신을 롤업하려고 ... Meteor로 완전히 새로운 계정 만들기 및 검증을 이해하려고 노력하고 있습니다. ValidateNewUser 함수로이 작업을 수행하는 방법이 있다면 대신 그 작업을 사용해야합니까?

도움 주셔서 감사합니다. 서버 측에서보고있는 암호 문자열은 사용자가에 입력 한 내용과 동일하지 않도록

+0

사전 제작 된 물건을 사용하고 있지 않습니까? 계정 비밀번호 패키지가 아닌가요? –

+0

저는 accounts-base와 accounts-password를 사용하고 있습니다. 안녕 Peppe! 너 많이 자지 않아? 오해의 소지가 있기 때문에 사전 제작 된 내용은 말하지 말았어야합니다. 내 질문을 수정했습니다. :) – user1447679

답변

0

the documentation에 따르면, 암호는 "와이어를 통해 일반 텍스트로 전송되지 않습니다."

편집 : 적어도, 그게 내가 생각하는거야.

EDIT2 : another question에있는 내용이 확인되었습니다.

+0

암호 서버 쪽의 유효성을 어떻게 확인할 수 있습니까? 그냥 아이디어가 있었어.아마도 Accounts.createUser를 호출하기 전에 유효성을 검사해야합니다. – user1447679

+0

@ user1447679 사용자가 클라이언트에 쓰는 암호는 서버로 보내기 전에 클라이언트에서 항상 해시됩니다. 서버에서 유효성을 검사 할 수 없습니다. 가장 좋은 방법은 클라이언트에서 유효성 검사를하는 것입니다 (악의적 인 사용자가 클라이언트에서 유효성 검사 규칙을 무시할 수도 있음). –

+0

내 양식을 사용하는 경우에도? 1. 서버 밸리데이션 로직에 폼 값을 보냅니다. 2. 패스하는 경우 Accounts.CreateUser 함수를 호출 하시겠습니까? – user1447679

1

계정 암호는 SRP입니다. 약간 복잡하기 때문에 여기서는 완전히 설명하지 않겠습니다. 해시 된 토큰의 실제 검사는 here 주위에 발생합니다 기본적으로 암호는 서버에 일반 텍스트 문자열로 도착하지 않으므로 SRP를 사용하는 동안 서버에 암호 정책을 적용 할 수 없습니다.

특히 주위에 here (독자적으로 SRP를 구현하고 싶지 않은 사람들을 위해 DDP 전용 "일반 텍스트"로그인 옵션이 있습니다. 광고되는대로 사용자가 SSL으로 연결된 경우에만 사용해야합니다. 나는 아마 거기에서 시작할 것입니다.

그 동안 서버 측 로그인 처리기를 굴릴 수있을 때까지 적어도 클라이언트 측에서 시행 할 수 있습니다.

meteorhacks article 사용자 정의 로그인 핸들러 자습서를 확인하십시오.

2

나는 이것을 수행하는 가장 좋은 방법을 알아 냈습니다. 희망이 다른 사람들을 도울 것입니다.

서버 측에서 오류를 확인하고 반환하는 방법을 사용하고 있습니다. 그런 다음 계정 생성을 진행하십시오.

Meteor.call('Validate_Registration', email, password, cpassword, firstname, lastname, terms, function(error) { 
      if (error) { 
       error = error.reason; 
       $('#Error-Block').fadeIn().children('ul').html(error); 
       console.log(error); 
      } else { 
       Accounts.createUser({ 
        username: email, 
        email: email, 
        password: password, 
        profile: { 
         firstname: firstname, 
         lastname: lastname 
        } 
       }, function(error) { 
        if (error) { 
         error = error.reason; 
         $('#Error-Block').fadeIn().children('ul').html(error); 
        } else { 
         var uid = Accounts.connection.userId(); 
         Meteor.call('Verify_Email', uid, email); 
         Router.go('/email-instructions'); 
        } 
       }); 
      } 
     }); 

이 시점에서 내가 확신 해요있는 유일한 방법은 그것을 사용하는 올바른 인 경우입니다 :

var uid = Accounts.connection.userId(); 

이 현재 사용자의 로컬 것으로 보인다 및 로컬 저장 장치에 저장된다 사용자.

+1

포인트를 가져올 수 없습니다. 이렇게하면 추가 트래픽이 추가되어 점검을 수행 할 수 있습니다. 나쁜 사용자는 클라이언트 측 검사를 무시하도록 관리 할 수있는 것처럼 검사 결과를 무시할 수 있습니다. – Season

관련 문제