在ExpressJS应用程序错误中集成PassportJS

时间:2014-12-03 00:38:07

标签: node.js express passport.js

我一直在尝试将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时,我应该记住什么?我真的很感激任何帮助。

我刚开始研究节点,我真的很想从这个基本功能(即身份验证)开始。

1 个答案:

答案 0 :(得分:0)

您必须在路线中使用配置的护照对象。不是通过新的要求。

更改路径文件以导出将护照对象作为参数并使用该功能的函数。

这是一个教程:http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local