问题描述
我正在尝试将通行证集成到我的网站,但收到错误消息 {"message":"Missing credentials"}。我正在查看我的代码几个小时,但无法弄清楚问题是什么。我浏览了这里所有发布的解决方案,我正在做其他人推荐的事情。但是,我无法找到解决方案。我相信我的问题是不使用默认的护照用户名和密码。在我的本地策略中,我按照文档说明将 usernameField 更改为“email”。
非常感谢任何帮助。
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">×</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 (将#修改为@)