节点护照错误:未知身份验证策略“本地登录”

Posted

技术标签:

【中文标题】节点护照错误:未知身份验证策略“本地登录”【英文标题】:nodes passport Error: Unknown authentication strategy "local-login" 【发布时间】:2016-03-11 17:47:07 【问题描述】:

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

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

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>

谁能帮助我告诉我我做错了什么。谢谢

【问题讨论】:

【参考方案1】:

我也遇到了同样的问题,但是当我将这行代码放在app.use(flash()) 之后时,它起作用了:

app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
require('./config/passport')(passport);

【讨论】:

【参考方案2】:
require('./config/passport')(passport);

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

这里是线的位置的sn-p:

// server.js

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

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

【讨论】:

以上是关于节点护照错误:未知身份验证策略“本地登录”的主要内容,如果未能解决你的问题,请参考以下文章

未知的身份验证策略护照

NestJS - 错误:未知的身份验证策略“本地”

无法运行护照登录策略。身份验证错误~ TypeError: Cannot read property 'authenticate' of undefined

得到“错误”:“未知的身份验证策略\”jwt\“”

passport.js 抛出未知的身份验证策略“谷歌”

我是不是需要使用快速会话以及护照和 JSON Web 令牌进行身份验证?