Node、Express 3和Passport:登录表单不起作用
Node, Express 3 and Passport: Login form not working
我是Node的新手,有Node、Express和Passport设置,而且似乎可以工作。也就是说,我没有看到错误消息。
问题是,当我转到登录页面并尝试登录时,什么都没有发生。单击按钮后页面会刷新,但没有执行任何操作。
我已经粘贴了下面的代码。
这是我提交表单时的终端输出:
08:19:53 web.1 | POST /login 302 3ms - 68
08:19:53 web.1 | GET /login 304 11ms
08:19:53 web.1 | GET /stylesheets/base.css 304 1ms
这是登录视图(Jade):
- if (message)
p
strong =message
form(method="post", action="/login")
fieldset
label(for="username") Username
input.text-input(type="text", name="username")
label(for="password") Password
input.text-input(type="password", name="password")
button.btn-submit(type="submit") Login!
a.btn-cancel(href="/") Cancel
以下是最初调用登录页面的代码(为了清晰起见,我去掉了其他内容):
app.js
app.get("/login", routes.login);
路由/索引.js
(function() {
var Post;
Post = require('../models/Post');
module.exports = {
login: function(req, res) {
return res.render("login", {
user: req.user,
message: req.flash("Login error!"),
title: "Login | David Yeiser"
});
}
};
}).call(this);
下面是app.js中处理帖子的部分:
app.post("/login", passport.authenticate("local", {
failureRedirect: "/login",
failureFlash: true
}), function(req, res) {
return res.redirect("/office");
});
最后,这里是整个app.js:
(function() {
var LocalStrategy, app, express, findById, findByUsername, flash, http, mongoose, passport, path, routes, user, users, util;
express = require('express');
routes = require('./routes');
user = require('./routes/user');
http = require('http');
path = require('path');
mongoose = require('mongoose');
passport = require('passport');
flash = require('connect-flash');
util = require('util');
LocalStrategy = require('passport-local').Strategy;
users = [
{
id: 1,
username: 'bob',
password: 'secret',
email: 'bob@me.com',
id: 2,
username: 'nancy',
password: 'secrettoo',
email: 'nancy@me.com'
}
];
findById = function(id, fn) {
var idx;
idx = id - 1;
if (users[idx]) {
return fn(null, users[idx]);
} else {
return fn(new Error('User does not exist'));
}
};
findByUsername = function(username, fn) {
var i, len;
i = 0;
len = users.length;
while (i < len) {
user = users[i];
if (user.username === username) {
return fn(null, user);
}
i++;
}
return fn(null, null);
};
passport.serializeUser(function(user, done) {
return done(null, user.id);
});
passport.deserializeUser(function(id, done) {
return findById(id, function(err, user) {
return done(err, user);
});
});
passport.use(new LocalStrategy(function(username, password, done) {
return process.nextTick(function() {
return findByUsername(username, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, {
message: "Unknown user " + username
});
}
if (user.password !== password) {
return done(null, false, {
message: "Invalid password"
});
}
return done(null, user);
});
});
}));
app = express();
app.configure(function() {
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({
secret: 'keyboard cat'
}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
return app.use(express["static"](path.join(__dirname, 'public')));
});
app.configure('development', function() {
mongoose.connect('mongodb://localhost/davidyeiser_dev');
return app.use(express.errorHandler());
});
app.get("/", routes.index);
app.get("/login", routes.login);
app.post("/login", passport.authenticate("local", {
failureRedirect: "/login",
failureFlash: true
}), function(req, res) {
return res.redirect("/office");
});
app.get("/logout", function(req, res) {
req.logout();
return res.redirect("/");
});
app.get("/post/new", routes.newPost);
app.post("/post/new", routes.addPost);
app.get("/post/:id", routes.viewPost);
app.get("/users", user.list);
http.createServer(app).listen(app.get("port"), function() {
return console.log("Express server listening on port " + app.get("port"));
});
}).call(this);
您看到的大部分内容都取自Passport Express 3示例:https://github.com/jaredhanson/passport-local/blob/master/examples/express3/
我很感谢你能给我的任何帮助。
啊哈!用户数组构造不正确。
users = [
{
id: 1,
username: 'bob',
password: 'secret',
email: 'bob@me.com',
id: 2,
username: 'nancy',
password: 'secrettoo',
email: 'nancy@me.com'
}
];
需要:
users = [
{
id: 1,
username: 'bob',
password: 'secret',
email: 'bob@me.com'
},
{
id: 2,
username: 'nancy',
password: 'secrettoo',
email: 'nancy@me.com'
}
];
我发现它的方式是,我只是减少到一个用户(在大约1000件其他事情中),然后最终意识到这就是错误。其他一切保持不变。
(我以前没有抓住它的原因是因为我每次都在使用"bob",从未想过要尝试"nancy")
相关文章:
- 有登录表单时无法提交表单
- 如何在提交按钮上定义登录表单的路径
- asp.net mvc中的javascript验证不适用于登录表单
- javascript登录表单提交
- 如何制作登录表单以登录我的网络邮件
- 将随机数添加到登录表单的URL的目的是什么
- 使用Ajax检查登录表单
- HTML文件到自动登录表单
- Android提交使用jquery的https登录表单
- 使用AJAX提交登录表单并获得响应
- 当用户使用jquery点击任何位置时,切换并隐藏登录表单
- 在jquery幻灯片登录表单上显示消息
- 使用php/javascript的简单登录表单
- Protractor测试:如何设置登录表单中文本元素的值
- ajax登录表单,重新加载到表单而不是页面上
- cookie在销毁时出现在登录表单中
- Ajax在登录表单中显示错误,而不重新加载页面
- Node.js、socket.io 和 mongojs - 带有 socket.io 的登录表单
- 捕获点击事件以弹出登录表单(如果用户未登录)
- 如何实现自定义 Auth0 登录表单的服务器端代码