2016-09-25 106 views
1

我想創建護照本地註冊功能,但每當我嘗試打auth /註冊API,我總是重定向到失敗路徑,即failureRedirect:'/ auth/failure'註冊與護照本地身份驗證不工作在node.js

代碼對我來說似乎很好。

app.js:

var passport = require('passport'); 
var api = require('./routes/api'); 
var authenticate = require('./routes/authenticate')(passport); 
require('./models/models'); 
var mongoose = require('mongoose'); 
mongoose.connect("mongodb://localhost:27017/test-chirp"); 
var app = express(); 

app.use('/auth', authenticate); 

//// Initialize Passport 
var initPassport = require('./passport-init'); 
initPassport(passport); 

authenticate.js:

var express = require('express'); 
var router = express.Router(); 

module.exports = function(passport){ 

    //sends successful login state back to angular 
    router.get('/success', function(req, res){ 
     res.send({state: 'success', user: req.user ? req.user : null}); 
    }); 

    //sends failure login state back to angular 
    router.get('/failure', function(req, res){ 
     res.send({state: 'failure', user: null, message: "Invalid username or password"}); 
    }); 

    //sign up 
    router.post('/signup', passport.authenticate('signup', { 
     successRedirect: '/auth/success', 
     failureRedirect: '/auth/failure' 
    })); 

    return router; 
} 

護照init.js:

var mongoose = require('mongoose'); 
var User = mongoose.model('User'); 
var LocalStrategy = require('passport-local').Strategy; 
var bCrypt = require('bcrypt-nodejs'); 

module.exports = function (passport) { 
    passport.serializeUser(function (user, done) { 
     //return the unique id for the user 
     return done(null, user._id); 
    }); 

    passport.deserializeUser(function (username, done) { 
     User.findById(id, function (err, user) { 
      if (err) { return done(err, false); } 
      if (!user) { return done('user not found', false); } 
      return done(user, true); 
     }) 
    }); 



    passport.use('signup', new LocalStrategy({ 
     passReqToCallback: true 
    }, 
     function (req, username, password, done) { 
      // find a user in mongo with provided username 
      User.findOne({ 'username': username }, function (err, user) { 
       if (err) {return done(err);} 
       // already exists 
       if (user) {return done(null, false);} 
       else { 
        // if there is no user, create the user 
        var newUser = new User(); 

        // set the user's local credentials 
        newUser.username = username; 
        newUser.password = createHash(password); 

        // save the user 
        newUser.save(function (err) { 
         if (err) {throw err;} 
         console.log(newUser.username + ' Registration succesful'); 
         return done(null, newUser); 
        }); 
       } 
      }); 
     }) 
    ); 

    var isValidPassword = function (user, password) { 
     return bCrypt.compareSync(password, user.password); 
    }; 
    // Generates hash using bCrypt 
    var createHash = function (password) { 
     return bCrypt.hashSync(password, bCrypt.genSaltSync(10), null); 
    }; 
}; 

enter image description here enter image description here enter image description here

+0

你得到任何錯誤?你是否獲得了「用戶名」和「密碼」的正確值? – abdulbarik

+0

@abdulbarik:沒有沒有錯誤 –

+0

你會得到'username'和'password'嗎? – abdulbarik

回答

0
var app = express(); 

app.use('/auth', authenticate); 

//// Initialize Passport 
var initPassport = require('./passport-init'); 
initPassport(passport); 

要初始化護照前路由到該路徑/auth

嘗試切換:

var app = express(); 

//// Initialize Passport 
var initPassport = require('./passport-init'); 
initPassport(passport); 

app.use('/auth', authenticate); 
+0

試過這個,但還是沒有運氣。 –