Сброс пароля не работает в loopback 3.0 - PullRequest
0 голосов
/ 01 апреля 2019

Я пытался реализовать функцию сброса пароля в моем проекте, который использует nodejs и loopback версии 3.0. Loopback предоставляет встроенный метод для этой функции сброса пароля в файле user.js. Когда я запускаю проект и проверяю пароль сброса, он запускается без каких-либо ошибок, но электронное письмо не получено.

Это встроенный метод, предоставленный loopback для функции сброса пароля.

 User.resetPassword = function(options, cb) {
    // console.log("options : "+options);
    // console.log("cb : "+cb);
    cb = cb || utils.createPromiseCallback();
    var UserModel = this;
    var ttl = UserModel.settings.resetPasswordTokenTTL || DEFAULT_RESET_PW_TTL;
    options = options || {};
    if (typeof options.email !== 'string') {
      var err = new Error(g.f('Email is required'));
      err.statusCode = 400;
      err.code = 'EMAIL_REQUIRED';
      cb(err);
      return cb.promise;
    }

    try {
      if (options.password) {
        UserModel.validatePassword(options.password);
      }
    } catch (err) {
      return cb(err);
    }
    var where = {
      email: options.email,
    };
    if (options.realm) {
      where.realm = options.realm;
    }
    UserModel.findOne({where: where}, function(err, user) {
      if (err) {
        return cb(err);
      }
      if (!user) {
        err = new Error(g.f('Email not found'));
        err.statusCode = 404;
        err.code = 'EMAIL_NOT_FOUND';
        return cb(err);
      }
      // create a short lived access token for temp login to change password
      // TODO(ritch) - eventually this should only allow password change
      if (UserModel.settings.emailVerificationRequired && !user.emailVerified) {
        err = new Error(g.f('Email has not been verified'));
        err.statusCode = 401;
        err.code = 'RESET_FAILED_EMAIL_NOT_VERIFIED';
        return cb(err);
      }

      if (UserModel.settings.restrictResetPasswordTokenScope) {
        const tokenData = {
          ttl: ttl,
          scopes: ['reset-password'],
        };
        user.createAccessToken(tokenData, options, onTokenCreated);
      } else {
        // We need to preserve backwards-compatibility with
        // user-supplied implementations of "createAccessToken"
        // that may not support "options" argument (we have such
        // examples in our test suite).
        user.createAccessToken(ttl, onTokenCreated);
      }

      function onTokenCreated(err, accessToken) {
        if (err) {
          return cb(err);
        }
        cb();
        UserModel.emit('resetPasswordRequest', {
            email: options.email,
            accessToken: accessToken,
            user: user,
            options: options,
          }
        );
      }
    });

    return cb.promise;
  };

При вводе электронного письма из loopback api для сброса пароля оно не выдает ошибок в консоли, но электронное письмо не работает.

Метод resetPassword вызывается во время процесса. Журнал консоли внутри метода печатается, как показано ниже.

{ email: '**********@gmail.com',
  authorizedRoles: { '$everyone': true } }
[Function: callback]

Меня смущает то, что работает метод проверки электронной почты который также встроен в user.js. При отправке письма с подтверждением в консоли печатается следующее.

mx resolved:  [ { exchange: 'alt1.gmail-smtp-in.l.google.com', priority: 10 },
  { exchange: 'alt2.gmail-smtp-in.l.google.com', priority: 20 },
  { exchange: 'gmail-smtp-in.l.google.com', priority: 5 },
  { exchange: 'alt4.gmail-smtp-in.l.google.com', priority: 40 },
  { exchange: 'alt3.gmail-smtp-in.l.google.com', priority: 30 } ]
MX connection created:  alt1.gmail-smtp-in.l.google.com
recv gmail.com>220 mx.google.com ESMTP 1si9238203plw.390 - gsmtp
send gmail.com>EHLO gmail.com
recv gmail.com>250-mx.google.com at your service, [112.135.5.40]
recv gmail.com>250-SIZE 157286400
recv gmail.com>250-8BITMIME
recv gmail.com>250-STARTTLS
recv gmail.com>250-ENHANCEDSTATUSCODES
recv gmail.com>250-PIPELINING
recv gmail.com>250 SMTPUTF8
send gmail.com>MAIL FROM:<hasikasadaruwan.mgtuk@gmail.com>
recv gmail.com>452 (IP, Sender) first encounter.

Было бы очень полезно, если бы кто-нибудь помог мне решить эту проблему, я застрял здесь на несколько дней. СПАСИБО заранее.

...