Express和Passport错误:未知的身份validation策略“login”

我目前正在运行一个简单的testingMEAN堆栈从在线教程利用:

  • Node.js的
  • Express.js
  • Passport.js

这里是应用程序文件:

app.js

var express = require("express"); var mongoose = require("mongoose"); var path = require("path"); var bodyParser = require("body-parser"); var cookieParser = require("cookie-parser"); var session = require("express-session"); var flash = require("connect-flash"); var ejs = require("ejs"); var routes = require("./routes"); var app = express(); mongoose.connect("mongodb://localhost:27017/testdb"); app.set("port", process.env.PORT || 3000); app.set("views", path.join(__dirname, "views")); app.set("view engine", "ejs"); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(session({ secret: "secret", resave: true, saveUninitialized: true })); app.use(flash()); app.use(routes); app.listen(app.get("port"), function() { console.log("MEAN social media server started on port " + app.get("port")); }); 

虽然这个app.js文件中有一些视图,但是这里的注意力集中在路由variables所需的路由上

routes.js

 var express = require("express"); var passport = require("passport"); var User = require("./models/user"); var router = express.Router(); router.use(function(req, res, next) { res.locals.currentUser = req.user; res.locals.errors = req.flash("error"); res.locals.infos = req.flash("info"); next(); }); router.get("/", function(req, res,next) { User.find() .sort({ createdAt: "descending" }) .exec(function(err, users) { if (err) { return next(err); } res.render("index", { users: users }); }); }); router.get("/signup", function(req, res) { res.render("signup"); }); router.post("/signup", function(req, res, next) { var username = req.body.username; var password = req.body.password; User.findOne({ username: username }, function(err, user) { if (err) { return next(err); } if (user) { req.flash("error", "User already exists"); return res.redirect("/signup"); } var newUser = new User({ username: username, password: password }); newUser.save(next); }); }, passport.authenticate("login", { successRedirect: "/", failureRedirect: "/signup", failureFlash: true })); router.get("/users/:username", function(req, res, next) { User.findOne({ username: req.params.username }, function(err, user) { if (err) { return next(err); } if (!user) { return next(404); } res.render("profile", { user: user }); }); }); module.exports = router; 

这里是views / signup.ejs文件:

意见/ signup.ejs

 <% include _header %> <h1>Sign up</h1> <form action="/signup" method="post"> <input name="username" type="text" class="form-control" placeholder="Username" required autofocus> <input name="password" type="password" class="form-control" placeholder="Password" required> <input type="submit" value="Sign up" class="btn btn-primary btn-block"> </form> <% include _footer %> 

views / signup.ejs文件上单击提交button时,“用户”logging确实会被提交到MongoDB数据库,但插入后,“/ signup”post方法中将显示以下错误:

localhost:3000 /注册(POST)

 Error: Unknown authentication strategy "login" at attempt (/<APP_PATH>/node_modules/passport/lib/middleware/authenticate.js:166:37) at authenticate (/<APP_PATH>/node_modules/passport/lib/middleware/authenticate.js:342:7) at Layer.handle [as handle_request] (/<APP_PATH>/node_modules/express/lib/router/layer.js:95:5) at next (/<APP_PATH>/node_modules/express/lib/router/route.js:131:13) at model.<anonymous> (/<APP_PATH>/node_modules/mongoose/lib/document.js:1731:20) at next_ (/<APP_PATH>/node_modules/hooks-fixed/hooks.js:89:34) at fnWrapper (/<APP_PATH>/node_modules/hooks-fixed/hooks.js:186:18) at /<APP_PATH>/node_modules/mongoose/lib/model.js:295:13 at /<APP_PATH>/node_modules/mongoose/lib/model.js:230:5 at /<APP_PATH>/node_modules/mongoose/lib/model.js:139:7 at /<APP_PATH>/node_modules/mongoose/node_modules/mongodb/lib/collection.js:479:5 at /<APP_PATH>/node_modules/mongoose/node_modules/mongodb/lib/collection.js:633:5 at /<APP_PATH>/node_modules/mongoose/node_modules/mongodb/lib/bulk/unordered.js:469:9 at resultHandler (/<APP_PATH>/node_modules/mongoose/node_modules/mongodb/lib/bulk/unordered.js:416:5) at /<APP_PATH>/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/server.js:778:13 at Callbacks.emit (/<APP_PATH>/node_modules/mongoose/node_modules/mongodb-core/lib/topologies/server.js:95:3) 

我注意到没有引用位于routes.js文件中的passport.authenticate函数的“login”事件。

任何人收到类似的“错误:未知的身份validation策略”login“”错误?

我会select删除这个问题,但是因为我真心熬夜解决这个问题,我至less应该发布错误是什么。

在构build这个应用程序时,创build了以下视图:

  • index.ejs
  • signup.ejs

如果你看一下上面的routes.js文件,当一个人发布registry单( router.post(“/ signup” )时,passport.authenticate会自动发送用户注册的“login”视图并发送用户到根端点。

被称为“login”状态的不存在导致错误,因此有以下消息:

“错误:未知的身份validation策略”login“”错误

感谢大家的帮助。