快递和护照错误:未知的认证策略“登录”
Express and Passport Error: Unknown authentication strategy "login"
我目前正在运行一个简单的测试MEAN堆栈从一个在线教程利用:
- 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文件中有视图,但这里的集中是用于routes变量所需的路由:
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;
这是视图/注册。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 %>
在视图/注册中单击提交按钮时。ejs文件,"用户"记录确实提交给MongoDB数据库,但是插入后,在"/注册"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)
我注意到护照没有引用"login"事件。authenticate函数位于routes.js文件中。
有人收到类似的"Error: Unknown authentication strategy "login"错误吗?
我会选择删除这个问题,但因为我真诚地熬夜解决这个问题,我应该至少发布错误是什么。
在构建此应用程序时,创建了以下视图:- index.ejs
- signup.ejs
如果你看一下上面的routes.js文件,当一个人发布注册表单时(router.post("/signup"..),护照就会被删除。Authenticate将自动向用户发送注册的"login"视图,并将用户发送到根端点。
不存在被调用的"login"状态导致错误,因此出现以下消息:
"Error: Unknown authentication strategy " login" Error
谢谢大家的帮助。
相关文章:
- 内容安全策略:页面's设置阻止加载资源
- 导致内容安全策略(CSP)冲突错误的本地jquery.js文件
- 旋转木马;启用内容安全策略时无法工作
- 同源策略目的|用户数据与基本页面数据|客户端页面抓取
- Dropbox oauth认证的IF语句的第二部分是't已触发
- 什么是谷歌地图'的javascript加载策略
- Extjs、Chrome扩展和内容安全策略
- Meteor针对唯一客户端集合的发布/订阅策略
- Getstream.io"未认证”;带有只读令牌
- 使用外部模块继承Jade模板的好策略,在Express上
- 在同一主机上对PHP文件使用XMLHTTP请求的Javascript违反了同源策略
- 内容安全策略指令:;脚本src'self'blob:文件系统:chrome扩展资源:“;获取是否时
- 如何将Sails.js挂钩路由连接到策略
- 禁用Mobile Safari中的同源策略
- 内容安全策略:无法在Chrome扩展中加载Google API
- 绕过同源策略,从跨域iframe中获取页面的顶部URL
- "缺少认证令牌”;当使用AWS apigclient(带凭据)时
- 为什么这个 JavaScript 调用没有打破“同源策略”
- 移动应用上的同源策略
- 快递和护照错误:未知的认证策略“登录”