簡體   English   中英

Passport Local Strategy不會被稱為NodeJS

[英]Passport Local Strategy doesn't get called NodeJS

我在NodeJS應用程序上實施本地護照時遇到一些麻煩。 我不明白我在做什么錯。 我將在這里列出該問題的重要代碼

app.js

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(passport.initialize());
app.use(passport.session());

users.js

var express = require('express');
var router = express.Router();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('../models/user.js');

passport.serializeUser(function(user, done) {
    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    User.getUserById(id, function(err, user) {
        done(err, user);
    });
});

passport.use(new LocalStrategy(
    function(username, password, done) {
        console.log('Entered passport'); // This doesn't even happen
        User.getUserByUsername(username, function(err, user) {
            if (err) throw err;
            if (!user) {
                console.log('Unknown User');
                return done(null, false, {
                    message: 'Unknown User'
                });
            }

            User.comparePassword(password, user.password, function(err, isMatch) {
                if (err) throw err;
                if (isMatch) {
                    return done(null, user);
                }
                console.log('Invalid Password');
                return done(null, false, {
                    message: 'Invalid Password'
                });
            });
            return done(null, user);
        });
    }
));

router.post('/login', passport.authenticate('local', {
    successRedirect: '/',
    failureRedirect: '/users/login',
    failureFlash: 'Invalid username or password'
}), function(req, res) {
    console.log("Authentication Successfull!");
    req.flash('success', 'You are logged in');
    res.redirect('/');
});

user.js (模型):

module.exports.getUserByUsername = function(username, callback) {
    var query = { username: username };
    User.findOne(query, callback);
}

module.exports.getUserById = function(id, callback) {
    User.findById(id, callback);
}

module.exports.comparePassword = function(candidatePassword, hash, callback) {
    bcrypt.compare(candidatePassword, hash, function(err, isMatch) {
        if(err) return callback(err);
        callback(null, isMatch);
    });
}

我沒有任何語法錯誤。 在users.js中,我想將一條消息記錄到控制台,但它甚至沒有到達那里。 當我只在其中輸入帶有console.log的函數時,登錄名上的post函數就會被解雇,但現在看來似乎沒有。 它只是重新加載頁面(看起來像它)。 任何幫助表示贊賞。

嘗試在護照初始化之前安裝session中間件:

var session = require('express-session')

app.use(session({ secret: 'xxxxxxx' }));
app.use(passport.initialize());
app.use(passport.session());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM