【问题标题】:Integrating PassportJS inside ExpressJS application error在 ExpressJS 应用程序中集成 PassportJS 错误
【发布时间】:2015-01-07 16:28:11
【问题描述】:

近一天以来,我一直在尝试将 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 %>

models/user.js

var mongoose = require('mongoose');

module.exports = mongoose.model('User', {
    username : { type: String },
    password : { type: String }
});

我已经为用户创建了我的 模型,但我被重定向到显示错误请求的页面。在控制台中,我看到了POST /login 400

我还错过了什么或者我还应该做什么?或者,当我尝试将 PassportJS 集成到我的应用程序中时,我应该记住什么?我真的很感激任何帮助。

我刚刚开始学习node,我真的很想从这个基本功能(即身份验证)开始。

【问题讨论】:

  • 404 error 是“找不到页面”。可能发生缺少路线或不正确的网址。 400 error 是“错误请求”。可能是输入值不正确或正文解析器不起作用

标签: node.js express passport.js


【解决方案1】:

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

更改路由文件以导出将护照对象作为参数的函数并使用它。

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

【讨论】:

  • 非常感谢您提供这个很棒的教程。它确实解决了我的问题。 :)
  • 没问题,很高兴听到这个消息。
猜你喜欢
  • 1970-01-01
  • 2012-05-25
  • 2013-07-01
  • 2018-01-25
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多