目前我一直在使用名为Postman的Chrome应用程序来测试nodejs / express / passportjs中的服务。
目前我无法掌握如何获取用户信息并使用骨干对其进行身份验证。
我会尝试像这样验证用户:
$.post("http://localhost:3000/login", { username: "joe", password: "pass" })
.done(function(data) {
console.log(data)
//try to pull a service that's protected by passport
})
.fail(function(data) {
console.log(data)
})
当它成功时,它根本不起作用。它给出了我为有人未登录时设置的500错误。
我应该采用什么方向来管理主干中的passportjs身份验证?
答案 0 :(得分:0)
500错误意味着服务器中某些部分代码无法正常工作。 您可以使用护照从快递发送登录用户。您可以按照以下示例进行操作。
var app = express();
var login = require('./routes/login');
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login',
failureFlash: true }),
login.login);
您的login.js文件可能如下所示
exports.login = function (req, res) {
res.json(req.user);
}
护照的身份验证过程会在登录用户的请求(req)中填充用户变量。
请注意,您必须使用cookie解析器和快递会话才能使护照会话正常工作。如,
app.use(express.cookieParser());
app.use(express.session({ secret: 'keyboard cat' }));
您的本地身份验证可能如下所示(假设您有一个按用户名查找用户的函数(findByUsername))。
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
},
function(username, password, done) {
// asynchronous verification, for effect...
process.nextTick(function () {
// Find the user by username. If there is no user with the given
// username, or the password is not correct, set the user to `false` to
// indicate failure and set a flash message. Otherwise, return the
// authenticated `user`.
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);
})
});
}
));