如何在同一页面上显示Meteor.loginWithPassword callbak错误消息
我创建了一个自定义登录页面,并使用如何在同一页面上显示Meteor.loginWithPassword callbak错误消息,meteor,meteorite,Meteor,Meteorite,我创建了一个自定义登录页面,并使用Meteor.loginWithPassword(用户、密码、[callback])函数登录到应用程序 以下是登录模板: <template name ="Login"> <form class="login-form form-horizontal"> <div class="control-group"> <input class="em
Meteor.loginWithPassword(用户、密码、[callback])
函数登录到应用程序
以下是登录模板:
<template name ="Login">
<form class="login-form form-horizontal">
<div class="control-group">
<input class="email" type="text" placeholder="Email">
</div>
<div class="control-group m-inputwrapper">
<input class="password" type="password" placeholder="Password">
</div>
<div class="control-group">
<button type="submit" class="submit t-btn-login" >Login</button>
</div>
</form>
<div class="alert-container">
<div class="alert-placeholder"></div>
</div>
</template>
Template.Login.events({
'submit .login-form': function(e, t) {
e.preventDefault();
// retrieve the input field values
var email = t.find('.email').value,
password = t.find('.password').value;
Meteor.loginWithPassword(email, password, function(err) {
if (err) {
$(".alert-placeholder").html('<div></div><div class="alert"><span><i class="icon-sign"></i>'+err.message+'</span></div>')
}
});
return false;
}
});
登录
Template.Login.events({
“提交.登录表单”:函数(e,t){
e、 预防默认值();
//检索输入字段值
var email=t.find('.email').value,
password=t.find('.password').value;
Meteor.loginWithPassword(电子邮件、密码、函数(错误){
如果(错误){
$(“.alert占位符”).html(“”+err.message+“”)
}
});
返回false;
}
});
在调试时,我可以看到错误消息显示并添加到dom中。但它将得到刷新,消息将消失
meteor是否在meteor.loginWithPassword()之后重新呈现页面?如何克服这个问题?在使用meteor时,如果您发现自己用jQuery手动注入html元素,那么可能是做错了。我不太了解blaze的内部结构,无法给你一个确切的答案来解释为什么你的元素没有被保存下来,但这里有一个更像流星的解决方案: 在警报容器中,有条件地呈现错误消息:
{{{#如果错误消息}
{{errorMessage}}
{{/if}
如果存在err
,请在登录回调中设置errorMessage
会话变量:
Meteor.loginWithPassword(电子邮件、密码、函数(错误){
如果(错误){
Session.set('errorMessage',err.message);
}
});
最后,添加模板帮助程序以访问errorMessage
会话变量:
Template.Login.helpers({
errorMessage:函数(){
return Session.get('errorMessage');
}
});
您可以使用Bert在每页中显示错误消息。我在登录页面中使用它,如下所示:
Meteor.loginWithPassword(emailVar, passwordVar, function(error) {
if (error) {
Bert.alert(error.reason, 'danger', 'growl-top-right');
} else {
Router.go('/dashboard');
}
});
谢谢你的解决方案,大卫。我需要在不使用会话的情况下执行此操作。很有趣。。。您能说说为什么在您的情况下不允许使用会话变量吗?您可以使用另一种类型的被动变量吗?我需要在不使用会话的情况下使用。不使用会话就可以了。