2017-03-27 12 views
0

사용자 정의 로그인 페이지를 작성하고 Meteor.loginWithPassword (사용자, 비밀번호, [콜백]) 기능을 사용하여 앱에 로그인했습니다.Meteor.loginWithPassword의 사용자 정의 유효성 확인

Template.login.events({ 
    'submit form': function(event) { 
     event.preventDefault(); 
     var emailVar = event.target.loginEmail.value; 
     var passwordVar = event.target.loginPassword.value; 
     Meteor.loginWithPassword(emailVar, passwordVar, function(error) { 
      if (error) { 

       Bert.alert(error.reason, 'danger', 'growl-top-right'); 
      } else { 
       Router.go('/dashboard'); 
      } 
     }); 
    } 
}) 

그리고 내 HTML 파일은 다음과 같다 : JS 파일은 다음과 같습니다

<template name="login"> 

      <div class="input-group"> 
      <span class="input-group-addon"><i class="fa fa-envelope"></i></span> 
      <input type="email" name="loginEmail" class="form-control" placeholder= {{getLanguageValue "profile_email"}}> 
      </div> 
      <br> 
      <div class="input-group"> 
      <span class="input-group-addon"><i class="fa fa-lock"></i></span> 
      <input type="password" name="loginPassword" class="form-control" placeholder= {{getLanguageValue "myprofile_password"}}> 
      </div> 
      <button type="submit" class="btn btn-block btn-default"> Submit</button> 

나는 차단 된 사용자를 확인하기 위해 error.reason 다른 검증이 필요합니다. 어떻게해야합니까?

답변

0

사용자가 차단되었는지 확인하는 올바른 방법은 서버에 있습니다. 그가 차단했다면 그는 전혀 로그인해서는 안됩니다.

loginWithPassword이 클라이언트에서 호출되면 서버에서 validateLoginAttempt이 호출됩니다. 이렇게하면 서버를 검사하고 오류가 발생하여 로그인을 중단하거나 true를 반환하여 로그인을 계속할 수 있습니다. 내가 Meteor.loginWithPassword 부분이 도우미를 호출 할 수있는 방법

On the client (login.js)

Template.login.events({ 
    'submit form': function(event) { 
    event.preventDefault(); 
    var emailVar = event.target.loginEmail.value; 
    var passwordVar = event.target.loginPassword.value; 
    Meteor.loginWithPassword(emailVar, passwordVar, function(error) { 
     if (error) { 
     if (error.reason === 'Your account is blocked') { 
      Bert.alert("This user is blocked by admin and can not login", 'danger', 'growl-top-right'); 
     } else { 
      Bert.alert(error.reason, 'danger', 'growl-top-right'); 
     } 
     } else { 
     Router.go('/dashboard'); 
     } 
    }); 
    }, 
}); 

On the server (server.js)

Accounts.validateLoginAttempt((info) => { 
    const user = info && info.user; 

    if (user && user.profile && user.profile.isBlocked == 1) { 
    throw new Meteor.Error(403, 'Your account is blocked'); 
    } 

    return true; 
}); 
1

loginWithPassword 메서드를 호출하기 전에 도우미 함수를 정의하고 사용자 차단을 정의 할 수 있습니다. 이 같은

뭔가 : 당신이 loginWithPassword 콜백이 메서드를 호출하고 사용자가 차단되면 통화 로그 아웃 기능을 할 수

isBlocked = function(id) { 
    user = Meteor.users().findOne(id); 

    if user && user.profile && user.profile.isBlocked && user.profile.isBlocked == 1; 
} 

또는.

+0

을이 쓰기 .I :

내가 어떻게 할 것입니다 '다른 (isBlocked (emailVar 경우)) { console.log ('여기에 차단됨'); Bert.alert ("이 사용자는 관리자에 의해 차단되어 로그인 할 수 없습니다.", 'danger', 'growl-top-right'); }'이 오류가 발생합니다 : 'login'을 호출 한 결과를 전달하는 예외 : ReferenceError : isBlocked가 정의되어 있지 않습니다. – Mehr

+0

isBLocked를 콜백 함수에 바인드하십시오. –

+0

내가 제출 한 이벤트에서 도우미를 호출하는 방법을 모르겠다. this.isBlocked (emailVar) – Mehr

0

난 그냥 이런 식으로 다른 부분을 변경하고 그것은 작동 :

'submit form': function(event) { 
     event.preventDefault(); 
     var emailVar = event.target.loginEmail.value; 
     var passwordVar = event.target.loginPassword.value; 

     Meteor.loginWithPassword(emailVar, passwordVar, function(error) { 
      //console.log('here'); 
      if (error) { 
       Bert.alert(error.reason, 'danger', 'growl-top-right'); 
      } 
      else { 
        var user= Meteor.users.findOne({ "emails.0.address": emailVar }) 

        if (user && user.profile && user.profile.isBlock && user.profile.isBlock == 1){ 
        Bert.alert("This user is blocked by admin and can not login", 'danger', 'growl-top-right'); 
        } 
        else { 
        Router.go('/dashboard'); 
        } 
      } 
     }); 
    }, 

하지만 isBlocked라는 함수를 만들고 전역 함수 .like 모든 JS 파일에서이 함수를 호출하는 것을 좋아합니다.

함수이어야한다 :

isBlocked = function(id) { 
user = Meteor.users().findOne(id); 

if user && user.profile && user.profile.isBlocked && user.profile.isBlocked == 1; 
} 

나는 유성에서이 함수를 정의해야하는 위치 나도 몰라 어떻게 내가 이벤트를 제출에서 호출 할 수 있습니다.

관련 문제