![](/img/trans.png)
[英]Standard pattern to redirect a submit form after checking the insert was successful, on Meteor with AutoForm & Iron Router?
[英]Meteor - Can't submit user after adding routes with iron.Router to the login and register form
我想使用Meteor和Iron Router创建一个简单的Login,Register和Logout菜单。 在使用Iron Router软件包之前,我可以提交一个新用户并轻松登录或注销。 因此,我的html文档中包含以下代码:
<body>
{{#if currentUser}}
{{> dashboard}}
{{else}}
{{> register}}<br>
{{> login}}
{{/if}}
</body>
现在,我要路由登录和注册表单。 如果按“登录”按钮,我们应该获得: lochalhost:3000 login(效果很好)。
但我不知道:
我是JS和Meteor的新手。 仍然我没有在Internet上找到解决方案,也没有自己解决的方法。
我的完整文档如下所示:
main.html:
<head> <title>Routing</title> </head> <body> {{#if currentUser}} {{> dashboard}} <!--{{else}} {{> register}}<br> {{> login}} --> {{/if}} </body> <template name="main"> <h1>Text</h1> {{> navigation}} {{> yield}} <hr /> <p> Copyright © </p> </template> <template name="home"> <p> Welcome to the <b>Text</b> website. </p> </template> <template name="navigation"> <ul> <li><a href="{{pathFor route='home'}}">Home</a></li> <li><a href="{{pathFor route='register'}}">Register</a></li> <li><a href="{{pathFor route='login'}}">Login</a></li> </ul> </template> <template name="register"> <form> <input type="text" id="username"> <input type="text" id="email"> <input type="password" id="password"> <input type="submit" value="Register"> </form> </template> <template name="login"> <form> <input type="text" id="login-email"> <input type="password" id="login-password"> <input type="submit" value="Login"> </form> </template> <template name="dashboard"> <p> Yor're logged in. <a href="{{pathFor route='home'}}" class="logout">Logout</a> </p> </template>
main.js
Router.route('register'); // Default name is register Router.route('login'); // Default name is login Router.route('dashboard'); Router.route('/', { name: 'home', template: 'home' }); Router.configure({ layoutTemplate: 'main' }); if (Meteor.isClient) { Template.register.events({ 'submit form': function(event, template) { event.preventDefault(); var usernameVar = template.find('#username').value; var emailVar = template.find('#email').value; var passwordVar = template.find('#password').value; Accounts.createUser({ username: usernameVar, email: emailVar, password: passwordVar }) } }); Template.login.events({ 'submit form': function(event, template) { event.preventDefault(); var emailVar = template.find('#login-email').value; var passwordVar = template.find('#login-password').value; Meteor.loginWithPassword(emailVar, passwordVar); } }); Template.dashboard.events({ 'click .logout': function(event) { event.preventDefault(); Meteor.logout(); prompt("You successfully logged out"); } });
}
我补充说:
iron:router
包 meteor add accounts-ui accounts-password
我想说的是,请务必阅读Iron Router和Meteor的官方文档以更好地理解。 我接受了您的代码并进行了一些测试,它工作正常。 我只添加了iron:router accounts-ui(为此需要查找文档,您可以使用此程序包创建简单的登录和注册)和account-password。
main.html
<head>
<title>Routing</title>
</head>
<body>
{{#if currentUser}}
{{> dashboard}}
<!--{{else}}
{{> register}}<br>
{{> login}} -->
{{/if}}
</body>
<template name="main">
<h1>Text</h1>
{{> navigation}}
{{> yield}}
<hr />
<p>
Copyright ©
</p>
</template>
<template name="home">
<p>
Welcome to the <b>Text</b> website.
</p>
</template>
<template name="navigation">
<ul>
<li><a href="{{pathFor route='home'}}">Home</a></li>
{{#unless currentUser}}
<li><a href="{{pathFor route='register'}}">Register</a></li>
<li><a href="{{pathFor route='login'}}">Login</a></li>
{{/unless}}
</ul>
</template>
<template name="register">
{{#unless currentUser}}
<form>
<input type="text" id="username">
<input type="text" id="email">
<input type="password" id="password">
<input type="submit" value="Register">
</form>
{{/unless}}
</template>
<template name="login">
{{#unless currentUser}}
<form>
<input type="text" id="login-email">
<input type="password" id="login-password">
<input type="submit" value="Login">
</form>
{{/unless}}
</template>
<template name="dashboard">
<p>
Yor're logged in.
<a href="{{pathFor route='home'}}" class="logout">Logout</a>
</p>
</template>
main.js
goHome =function(){
if(Meteor.userId()){
Router.go('/');
}
}
Router.configure({
layoutTemplate: 'main'
});
Router.route('/register', {
template:'register',
onBeforeAction:function(){
goHome();
this.next();
}
}); // Default name is register
Router.route('/login', {
template:'login',
onBeforeAction:function(){
goHome();
this.next();
}
});
Router.route('/dashboard',{
template:'dashboard'
})
Router.route('/', {
name: 'home',
template: 'home'
});
if (Meteor.isClient) {
Template.register.events({
'submit form': function(event, template) {
event.preventDefault();
var usernameVar = template.find('#username').value;
var emailVar = template.find('#email').value;
var passwordVar = template.find('#password').value;
Accounts.createUser({
username: usernameVar,
email: emailVar,
password: passwordVar
}, function(error){
if(!error){
Router.go('/');
}
})
}
});
Template.login.events({
'submit form': function(event, template) {
event.preventDefault();
var emailVar = template.find('#login-email').value;
var passwordVar = template.find('#login-password').value;
Meteor.loginWithPassword(emailVar, passwordVar, function(error){
if(!error){
Router.go('/');
}
});
}
});
Template.dashboard.events({
'click .logout': function(event) {
event.preventDefault();
Meteor.logout();
prompt("You successfully logged out");
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.