Как создать пользовательские поля входа в Meteor?

В метеорите я использую поле ввода по умолчанию. Тем не менее, я хотел бы, чтобы пользователь создал уникальный идентификатор пользователя при создании учетной записи. Я мог бы сделать это жестко, но мне было интересно, есть ли способ сделать это, изменив поле loginButton каким-то образом. Кто-нибудь знает, как добавить дополнительные поля в общем, что пользовательская регистрация будет принудительно заполнена? Например, имя, имя пользователя и т.д.?

Ответ 1

Вспомогательный помощник loginButtons предназначен для простого прототипирования. Для настройки вам необходимо создать свои собственные формы входа/регистрации. Это довольно легко с документированным API учетных записей. Вот простой пример пользовательских форм регистрации/регистрации:

<template name="signupForm">
  <form id="signup-form">
    <h2>Sign Up</h2>

    <label for="signup-username">Username</label>
    <input type="text" id="signup-username" placeholder="Username" />

    <label for="signup-password">Password</label>
    <input type="password" id="signup-password" placeholder="Password" />

    <label for="signup-name">Full Name</label>
    <input type="text" id="signup-name" placeholder="Full Name" />

    <button type="submit">Sign Up</button>
  </form>
</template>

<template name="loginForm">
  <form id="login-form">
    <h2>Log In</h2>

    <label for="login-username">Username</label>
    <input type="text" id="login-username" placeholder="Username" />

    <label for="login-password">Password</label>
    <input type="password" id="login-password" placeholder="Password" />

    <button type="submit">Log In</button>
  </form>
</template>

<template name="logoutForm">
  <form id="logout-form">
    <button type="submit">Log Out</button>
  </form>
</template>
Template.signupForm.events({
  "submit #signup-form": function(event, template) {
    event.preventDefault();
    Accounts.createUser({
      username: template.find("#signup-username").value,
      password: template.find("#signup-password").value,
      profile: {
        name: template.find("#signup-name").value
        // Other required field values can go here
      }
    }, function(error) {
      if (error) {
        // Display the user creation error to the user however you want
      }
    });
  }
});

Template.loginForm.events({
  "submit #login-form": function(event, template) {
    event.preventDefault();
    Meteor.loginWithPassword(
      template.find("#login-username").value,
      template.find("#login-password").value,
      function(error) {
        if (error) {
          // Display the login error to the user however you want
        }
      }
    );
  }
});

Template.logoutForm.events({
  "submit #logout-form": function(event, template) {
    event.preventDefault();
    Meteor.logout(function(error) {
      if (error) {
        // Display the logout error to the user however you want
      }
    });
  }
});

Вы можете использовать методы Accounts.validateNewUser() и Accounts.onCreateUser() для проверки полей пользователя и выполнения дальнейшая настройка на пользовательские объекты, соответственно. Например, в обратном вызове onCreateUser вы можете изменить поле пользователя _id на все, что захотите, прежде чем возвращать объект пользователя, который будет вставлен в БД.

Обратите внимание, что этот пример не включает код, когда пользователь забыли свой пароль и захочет reset его. Вы можете использовать методы Accounts.forgotPassword и Accounts.resetPassword.

Ответ 2

Если у вас есть электронная почта как поле в вашей коллекции пользователей, и вы вводите идентификатор электронной почты вместо имени пользователя, он вводит систему в систему, поскольку мы не используем учетные записи здесь. Таким образом, мы не сможем использовать средство настройки учетных записей ui.