繁体   English   中英

流星-用iron添加路由后无法提交用户。将路由器添加到登录和注册表单

[英]Meteor - Can't submit user after adding routes with iron.Router to the login and register form

我想使用MeteorIron 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 &copy; </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 &copy;
    </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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM