node.js - Node Passport 错误 : Unknown authentication strategy "local-login"

标签 node.js mongodb passport.js

我一直在尝试在 nodejs 上使用 Passport 进行本地身份验证,据我所知,我的所有代码都是正确的,但我一直收到关于“未知身份验证策略”的同样烦人的错误,所以也许其他人可以帮助我对于这个问题,我的代码如下所示。

这是我在 nodejs 中配置 Passport 的代码。

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

module.exports = function(passport) {


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

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

    passport.use('local-signup', new LocalStrategy({

        usernameField : 'username',
        passwordField : 'password',
        passReqToCallback : true
    },

    function(req, username, password, done) {

        process.nextTick(function() {

            User.findOne({ 'local.username' : username}, function(err, user) {
                if (err)
                    return done(err);

                if(user) {
                    return done(null, false, req.flash('signupMessage', 'That Username is already taken.'));
                }

                else {

                    var newUser = new User();

                    newUser.local.username = username;
                    newUser.local.password = newUser.generateHash(password);


                    newUser.save(function(err) {
                        if(err)
                            throw err;

                        return done(null, newUser);
                    });
                }
            });
        });
    }));



    passport.use('local-login', new LocalStrategy({

        usernameField : 'username',
        passwordField : 'password',
        passReqToCallback : true
    },
    function(req, username, password,done) {

        User.findOne({ 'local.username' : username}, function(err, user) {

            if(err)
                return done(err);

            if(!user)
                return done(null, false, req.flash('loginMessage', 'No user found.'));

            if(!user.validPassword(password))
                return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.'));

            return done(null, user);
        });
    }));

};

这是服务器端的帖子。

app.post('/signin', passport.authenticate('local-login', {
    successRedirect : '/profile',
    failureRedirect : '/login',
    failureFlash : true
}));

这是 html 文档中的表单

<div id="signin">
        <form class="form-horizontal" method="POST" action="/signin">
            <div class="form-group">
            <label class="control-label col-sm-2">Username:</label> 
            <div class="col-xs-3">
                <input type="text" class="form-control"></input><br>
            </div>
            </div>
            <div class="form-group">
            <label class="control-label col-sm-2">Password:</label>
            <div class="col-xs-3">
                <input type="password" class="form-control"></input><br><br>
            </div>
            </div>
            <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <button type="submit" class="btn btn-default btn-lg">Sign In</button><br><br>
            </div>
            </div>
        </form>

        <div id="accountlinks">
            <a href="/signup">Create Account</a><br>
            <a href="">Forgot Password</a>
        </div>
    </div>

任何人都可以告诉我我做错了什么来帮助我。谢谢

最佳答案

require('./config/passport')(passport);

更改文件路径。如果没有这个工作, Passport 的配置将不会传递给路线。

下面是该行所在位置的片段:

// server.js

// configuration
===============================================================
mongoose.connect(configDB.url); // connect to our database

require('./config/passport')(passport); // pass passport for configuration

关于node.js - Node Passport 错误 : Unknown authentication strategy "local-login",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34128239/

相关文章:

javascript - node.js 无法获取/socket.io

javascript - 绑定(bind)到 umd 或 commonjs 时定义全局变量

java - MongoDB Solr 搜索以在单个搜索请求中获取文档关系

php - 即使在正确的 CFLAGS 之后,也无法在 64 位 linux 机器(AWS EC2 实例)上创建 32 位 php 扩展

node.js - passport.js 使用 sails.js 验证弹出窗口

javascript - linux node.js 中的意外标识符 "let"

arrays - 在nodejs中读取数组中的对象

mongodb - 如何处理更新时对损坏数据的验证?

node.js - Passport 注销()错误: Cast to ObjectId failed for value "logout" at path "_id" for model "somemodel(not the user model)"

node.js - nodejs Passport 总是会失败 URL