护照问题:无法从邮寄中获取用户凭据

问题描述

我正在尝试将通行证集成到我的网站,但收到错误消息 {"message":"Missing credentials"}。我正在查看我的代码几个小时,但无法弄清楚问题是什么。我浏览了这里所有发布的解决方案,我正在做其他人推荐的事情。但是,我无法找到解决方案。我相信我的问题是不使用认的护照用户名密码。在我的本地策略中,我按照文档说明将 usernameField 更改为“email”。

非常感谢任何帮助。

以下是我的 app.js 代码中的相关代码

const express = require("express");
const path = require("path");
const app = express();
const mongoose = require("mongoose");
const session = require("express-session");
const flash = require("connect-flash");
const methodoverride = require("method-override");
const passport = require("passport");
const LocalStrategy = require("passport-local");
const { body,validationResult } = require("express-validator");
const bodyParser = require("body-parser");
const expressSanitizer = require("express-sanitizer");
const Float = require("mongoose-float").loadType(mongoose,2);
const _ = require("lodash");

const preloadRoute = require("./routes/preloads"),monthRoute = require("./routes/months"),itemRoute = require("./routes/items"),indexRoute = require("./routes/index"),userRoute = require("./routes/user");

mongoose.connect("mongodb://localhost:27017/budgetDB",{
  useNewUrlParser: true,useUnifiedTopology: true,useFindAndModify: false,useCreateIndex: true,});

const db = mongoose.connection;
db.on("error",console.error.bind(console,"connection error:"));
db.once("open",() => {
  console.log("Database connected");
});

app.use(
  bodyParser.urlencoded({
    extended: true,})
);

app.use(express.urlencoded({ extended: true }));

// models
const Item = require("./models/items");
const Month = require("./models/months");
const Preloaded = require("./models/preloads");
const User = require("./models/users");

const sessionConfig = {
  secret: "somesecretpassword",resave: false,saveUninitialized: true,cookie: {
    httpOnly: true,expires: Date.Now() + 1000 * 60 * 60 * 24 * 7,maxAge: 1000 * 60 * 60 * 24 * 7,},};

app.use(expressSanitizer());
app.set("view engine","ejs");
app.set("views",path.join(__dirname,"views"));
app.use(express.static(path.join(__dirname,"public")));
app.use(methodoverride("_method"));
app.use(session(sessionConfig));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());

passport.use(
  new LocalStrategy(
    {
      usernameField: "login.email",passwordField: "login.password",passReqToCallback: true,User.authenticate()
  )
);
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

app.use((req,res,next) => {
  res.locals.success = req.flash("success");
  res.locals.error_user = req.flash("error_user");
  res.locals.error_password = req.flash("error_password");
  next();
});

这是我用来调试的发布路径:

    router.post(
  "/login",(req,next) => {
    passport.authenticate("local",(error,user,info) => {
      console.log(error);
      console.log(user);
      console.log(info);

      if (error) {
        res.status(401).send(error);
        console.log("Error called");
      } else if (!user) {
        res.status(401).send(info);
        console.log("Not user");
      } else {
        next();
      }
      res.status(401).send(info);
      console.log("Next function here.");
    })(req,res);
  },res) => {
    res.status(200).send("logged in!");
  }
);

这是我的用户架构:

    const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const passportLocalMongoose = require("passport-local-mongoose");

const userSchema = new Schema({
  email: {
    type: String,required: true,address: String,address2: String,city: String,state: String,zip: Number,});

userSchema.plugin(passportLocalMongoose,{ usernameField: "email" });

module.exports = mongoose.model("User",userSchema);

这是我的 ejs(仅相关部分):

    div class="modal fade" id="existingUserLogin" tabindex="-1" role="dialog" aria-labelledby="existingUserLogin"
    aria-hidden="true">
    <div class="modal-dialog" role="document">
      <div class="modal-content">
        <div class="modal-header">
          <h5 class="modal-title" id="existingUserLogin">Login</h5>
          <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
          </button>
        </div>
        <div class="modal-body">
          <form action="/user/login" method="POST" class="validated-form" novalidate>
            <div class="form-group">
              <label for="exampleInputEmail1">Email address</label>
              <input type="email" class="form-control" id="exampleInputEmail1" name="login[email] required"
                aria-describedby="emailHelp" placeholder="Enter email" required>
              <div class="valid-Feedback">
                Looks good!
              </div>
              <div class="invalid-Feedback">
                Please provide a valid email.
              </div>
            </div>
            <div class="form-group">
              <label for="exampleInputPassword1">Password</label>
              <input type="password" class="form-control" id="exampleInputPassword1" name="login[password] required"
                placeholder="Password" required>
              <div class="valid-Feedback">
                Looks good!
              </div>
              <div class="invalid-Feedback">
                Please provide the password associated with the email above.
              </div>
            </div>
        </div>
        <div class="modal-footer">
          <button type="submit" class="btn btn-primary">Submit</button>
          <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        </div>
        </form>
      </div>
    </div>
  </div>

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)