2017-03-27 33 views
0

私はカスタムログインページを作成し、Meteor.loginWithPassword(ユーザー、パスワード、[コールバック])関数を使用してアプリケーションにログインしました。 JSファイルは、このようなものです:私はブロックされたユーザーを確認するためのerror.reasonで別の検証が必要Meteor.loginWithPasswordのカスタム検証

<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> 

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ファイルは次のようです。どうやってやるの?

答えて

0

ユーザーがブロックされているかどうかを確認する正しい方法はサーバー上にあります。彼がブロックされている場合、彼は全くログインしてはいけません。

loginWithPasswordがクライアントで呼び出されると、サーバ上でvalidateLoginAttemptが呼び出されます。このようにして、サーバーのチェックを実行し、エラーをスローしてログインを中止するか、trueを返すことでログインを続行できます。

これは私がそれを行うだろうかです:

私はこの書き込みMeteor.loginWithPassword一部.Iにこのヘルパーを呼び出すことができますどのように

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メソッドを呼び出す前に、ヘルパー関数を定義して、ユーザーブロックをチェックすることができます。このような

何か:

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

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

それとも、loginWithPasswordコールバックで、ユーザーが通話ログアウト機能をブロックされている場合は、このメソッドを呼び出すことができます。

+0

:(isBlocked(emailVar場合は '他の)){ console.log( 'ここでブロック'); Bert.alert( "このユーザーは管理者によってブロックされ、ログインできません"、 "危険"、 "うなり音 - 右上"); } 'しかし、私はこのエラーが発生します: '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; 
} 

私にはわからないとどのように私は、イベントを提出でそれを呼び出すことができます。