【问题标题】:Passport returning "missing credentials" error护照返回“缺少凭据”错误
【发布时间】:2018-06-02 08:11:27
【问题描述】:

这里是新手...我正在处理密码重置表单,所以我只在我的 POST 表单中传递一封电子邮件。我收到了Missing credentials 错误消息,我什至没有了解我为这个功能制定的策略,所以我不会查询UserModel。什么可能导致此错误?

我的代码如下:

password_reset_request.html:

<div class="modal fade" id="passwordresetrequest-modal" tabindex="-1" role="dialog" aria-labelledby="passwordresetrequestLabel" aria-hidden="true" style="display: none;">
  <div class="modal-dialog">
        <div class="signup-modal-container">
      <form class="form-signin" action="/password_reset_request" id="password_reset_request_form" method="post">
        <h2 class="form-signin-heading">Request Password Reset for BIDS</h2>
        <label for="email" class="sr-only">Email address</label>
        <input type="email" name="email" id="email" class="form-control" placeholder="Email address" required="" autofocus="">
        <button class="btn btn-lg btn-primary btn-block" name="reset_request" type="submit">Send Password Reset Email</button>
      </form>
    </div>
    </div>
</div>

app.js:

var express = require("express");
var bodyParser = require("body-parser");
var passport = require("passport");
...
var app = express();
app.use(bodyParser.urlencoded({ extended: true }));
require("./config/passport")(passport);
...

index.js:

  app.post("/password_reset_request", function(req, res, next) {
    passport.authenticate("local-password-reset-request", function(err, user, info) {
      // NOTE: I'm getting a "null" value for my "err" param.
      // NOTE: the "info" param is where I'm getting my "message: 'Missing credentials'" message.
      if (err) {
        return next(err);
      }
      if (!user) {
        req.flash("error", "Reset failed, no such email.");
        return res.redirect("/");
      }
    })(req, res, next);
  });

passport.js:

  passport.use("local-password-reset-request", new LocalStrategy({
    usernameField: "email",
    passReqToCallback: true
  }, function(req, username, done) {
    new UserModel.User({ email: email }).fetch().then(function(user) {
      // if no user is found, return the message
      if (!user)
        return done(null, false, req.flash("loginMessage", "No user found."));

      var new_password = randomstring.generate({
        length: 12,
        charset: 'alphabetic'
      });

      user
        .set('password', UserModel.generateHash(new_password))
        .save()
        .then(function() {
          console.log('new_password: ' + new_password);
          // Mailer.sendNewPasswordMail(
          //   user.get("email"),
          //   new_password,
          //   req.headers.host
          // );
          return done(null, user);
        })
        ;

      return done(null, user);
    });
  }));

【问题讨论】:

    标签: javascript node.js express passport.js passport-local


    【解决方案1】:

    当我使用LocalStrategy 时,我需要同时提供usernameFieldpasswordField。因为我实际上并没有使用那个 passwordField 值,所以我传递了任何非空白值并简单地忽略它。

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 2020-05-12
      • 2020-12-19
      • 1970-01-01
      • 2020-04-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-27
      相关资源
      最近更新 更多