我创建了一个自定义登录页面,并使用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中进行另一次验证,以检查被阻止的用户。我怎么能这样做?
答案 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;
});