2014-12-03 54 views
0

我一直在嘗試將PassportJS集成到運行在Express之上的節點應用程序中幾乎一天,現在我又回到了同樣的錯誤。這是要麼我得到一個不好的要求,要麼我收到一個POST /login 404。我真的需要你的幫助。在ExpressJS應用程序中集成PassportJS錯誤

我的應用程序很簡單。

這裏是我的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()); 

路線 file:

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

'404錯誤'是「頁面未找到」。也許發生在丟失路線或不正確的網址。 '400錯誤'是「錯誤的請求」。也許是由於輸入值不正確或body-parser無法正常工作 – 2014-12-03 02:12:43

回答

0

您必須在路由中使用配置的護照對象。沒有通過新的要求。

更改路由文件以導出將護照對象作爲參數並使用該功能的函數。

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

+0

非常感謝你爲這個令人敬畏的教程。它確實解決了我的問題。 :) – 2014-12-04 12:19:35

+0

沒問題,很高興聽到這一點。 – juunas 2014-12-04 12:20:26

相關問題