Meteor.loginWithPassword

时间:2017-03-27 06:53:11

标签: javascript meteor meteor-blaze

我创建了一个自定义登录页面,并使用Meteor.loginWithPassword(用户,密码,[回调])功能登录该应用程序。 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) {

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

我的HTML文件是这样的:

<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中进行另一次验证,以检查被阻止的用户。我怎么能这样做?

3 个答案:

答案 0 :(得分:1)

您可以在调用loginWithPassword方法之前定义辅助函数并检查用户是否被阻止。

这样的事情:

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

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

或者您可以在loginWithPassword回调中调用此方法,如果用户被阻止,则呼叫注销功能。

答案 1 :(得分:0)

我只是改变了这样的其他部分并且它有效:

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

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

但我喜欢创建一个名为isBlocked的函数,并在每个Js文件中调用此函数。就像一个全局函数。

这应该是功能:

 public class BaseModel
    {
        public string UserName { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string RoleName { get; set; }
        public string RoleId { get; set; }
        public int UserId { get; set; }
        public Dictionary<int,string> Orders { get; set; }
        public Dictionary<int,string> CustomersBirthday { get; set; }
        public int BranchId { get; set; }
        public SelectList Branch { get; set; }
    }

我不知道在流星中我应该在哪里定义此功能,如何在提交事件中调用它。

答案 2 :(得分:0)

检查用户是否被阻止的正确方法是在服务器上。如果他被封锁,他根本不应该登录。

在客户端中调用loginWithPassword后,将在服务器上调用validateLoginAttempt。这样,您可以对服务器执行检查并通过抛出错误中止登录或通过返回true继续登录。

我就是这样做的:

  

在客户端(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');
      }
    });
  },
});
  

在服务器(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;
});