【问题标题】:Meteor recover password and change password流星恢复密码和更改密码
【发布时间】:2015-09-11 12:13:37
【问题描述】:

我是流星的新手,我正在尝试在流星中恢复密码和更改密码。我将在我用来执行此操作的代码下方发布。我确实得到了模板,但密码没有改变。谁能帮我解决这个问题?我正在使用包accounts-password

自定义用户帐户.html:

<template name="RecoverPassword">  

    <form id="set-new-password">
      <label for="new-password">New Password</label>
      <input type="password" id="new-password" placeholder="Try not to forget this one.">

      <input type="submit" value="Set New Password">

      <p id="form-messages"></p>
    </form>

    <form id="forgot-password">
      <label for="user-email">Email</label>
      <input type="text" id="user-email" placeholder="Email">

      <input type="submit" value="Get Reset Password Instructions">

      <p id="form-messages"></p>
    </form>

</template>  
<template name="ChangePassword">  
    <form id="change-password">
        <label for="current-password">Current Password</label>
        <input type="password" id="current-password" placeholder="Current Password">

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

        <label for="new-password-repeated">Repeat New Password</label>
        <input type="password" id="new-password-repeated" placeholder="Repeat New Password">

        <input type="submit" value="Update Password">

        <p id="form-messages"></p>
    </form>
</template>

自定义 user-accounts.js:

if (Meteor.isServer) {
  Template.RecoverPassword.events({
    'submit #change-password': function(event, template) {
      var currentPassword,
          newPassword,
          newPasswordRepeated;

      currentPassword = template.find('#current-password');
      newPassword = template.find('#new-password');
      newPasswordRepeated = template.find('#new-password-repeated');



      if (newPassword !== newPasswordRepeated) {
        template.find('#form-messages').html("The new passwords don't match!");

        return false;
      }


      if (Meteor.isServer) {
        if (Accounts._resetPasswordToken) {
          Session.set('resetPasswordToken', Accounts._resetPasswordToken);
        }

        Template.RecoverPassword.helpers({
          resetPassword: function() {
            return Session.get('resetPasswordToken');
          }
        });

        Template.RecoverPassword.events({
          'submit #forgot-password': function(event, template) {
            event.preventDefault();
            var email = template.find('#user-email'),
                message;
            alert(email);

            if (email) {

              Accounts.forgotPassword(email);
              message = 'Sent a reset password link to ' + email + '.';
            } else {
              message = 'Please enter a valid email address.'
            }


            template.find('#form-messages').html(message);

            return false;
          },
          'submit #set-new-password': function(event, template) {
            event.preventDefault();
            // Proper decoupled validation would be much nicer than this
            var password = template.find('#new-password').value,
                passwordTest = new RegExp("(?=.{6,}).*", "g");


            if (passwordTest.test(password)) {
              Accounts.resetPassword(
                Session.get('resetPasswordToken'),
                password,
                function(error) {
                  if (err) {
                    template.find('#form-messages').html('There was a problem resetting your password.');
                  } else {

                    Session.set('resetPasswordToken', null);
                  }
                });
            } else {

              template.find('#form-messages').html('Your password is too weak!');
            }

            return false;
          }
        });
      }

我已经删除了insecureautopublish 选项,并且我已经发布了用户数据。我只是不明白为什么更改密码的模板不起作用。

【问题讨论】:

  • 一个问题是 Session 只是客户端,所以这段代码没有太大意义:if (Meteor.isServer){ if (Accounts._resetPasswordToken) { Session.set('resetPasswordToken', Accounts._resetPasswordToken); }

标签: javascript meteor meteor-accounts


【解决方案1】:

好吧,问题是您正在使用if (Meteor.isServer) 在服务器上运行该代码

您的所有客户端代码都需要在if (Meteor.isClient) 中,这是任何模板级别。如果它位于名为 client 的文件夹中,您也可以免费获得它。

【讨论】:

    猜你喜欢
    • 2019-08-13
    • 2016-08-29
    • 1970-01-01
    • 2014-12-11
    • 2012-09-30
    • 2011-07-14
    • 2011-06-13
    • 2010-11-30
    • 2012-02-01
    相关资源
    最近更新 更多