我一直在尝试将PassportJS集成到我在Express上运行的节点应用程序中近一天,而且我已经回到了同样的错误。我得到了一个错误的请求,或者我收到了POST /login 404
。我真的需要你的帮助。
我的应用非常简单。
这是我的 app.js 文件,其中我声明了护照:
passport.use(new LocalStrategy({
usernameField: 'username',
passwordField: 'password'
},
function(username, password, done) {
db.User.findOne({ username: username }, function (err, user) {
console.dir("Finding");
console.dir(username);
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
db.User.findById(id, function(err, user) {
done(err, user);
});
});
我已经在 app.js 中添加了以下内容:
app.use(passport.initialize());
app.use(passport.session());
路线文件:
var express = require('express');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('../models/user');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res) {
res.render('index', { title: 'BizTapp' });
});
router.get('/login', function(req,res){
res.render('login', { title: 'Login' });
});
router.post('/login', passport.authenticate('local'),
function(req,res){
res.redirect('/');
});
module.exports = router;
我的 html 文件:
<% include auth-header %>
<div class="login-panel">
<div class="content">
<div class="row">
<div class="col-md-6 col-md-offset-3">
<form method="post" role="form" enctype="multipart/form-data">
<div class="form-group">
<label for="username">User Name</label>
<input type="text" name="username" class="form-control" id="username" placeholder="Enter Username">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" name="password" class="form-control" id="password" placeholder="Password">
</div>
<input type="submit" id="btn-login" value="Log In" />
</form>
<h4><a href="/signup">Create a new account?</a></h4>
</div>
</div>
</div>
</div>
<% include footer %>
模型/ user.js的
var mongoose = require('mongoose');
module.exports = mongoose.model('User', {
username : { type: String },
password : { type: String }
});
我已经为用户创建了模型,但我被重定向到了说错误请求的页面。在控制台中,我看到POST /login 400
。
我还错过了什么或者我该怎么做?或者,当我尝试在我的应用程序中集成PassportJS时,我应该记住什么?我真的很感激任何帮助。
我刚开始研究节点,我真的很想从这个基本功能(即身份验证)开始。
答案 0 :(得分:0)
您必须在路线中使用配置的护照对象。不是通过新的要求。
更改路径文件以导出将护照对象作为参数并使用该功能的函数。
这是一个教程:http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local