【问题标题】:Unknown authentication strategy "local"未知的身份验证策略“本地”
【发布时间】:2018-06-08 22:24:36
【问题描述】:

我正在尝试对我网站上的用户进行身份验证,但出现此错误

未知的身份验证策略“本地登录”

我尝试更改策略的名称,也阅读了 SO 中的其他线程,但没有找到解决方案。

// Passport
module.exports = function(passport) {
    passport.serializeUser(function(user, done) {
    done(null, user.id);
});

passport.deserializeUser(function(id, done) {
    connection.query('SELECT * FROM `users` WHERE `id` = ' + connection.escape(id), function(err, rows) {
        done(err, rows[0]);
    });
});

passport.use('local-login', new LocalStrategy({
    usernameField : 'username',
    passwordField : 'password'
},
function(req, username, password, done) {
    connection.query('SELECT * FROM `users` WHERE `username` = ' + connection.escape(username), function(err, rows) {
        if(err)
            return done(err);
        if(!rows.length) {
            return done(null, false, req.flash('loginMessage', 'Invalid username or password. Please try again.'));
        }
        if(!(rows[0].password == password))
            return done(null, false, req.flash('loginMessage', 'Invalid username or password. Please try again.'));

        return done(null, rows[0]);
    });
  }));
}

// Express Router
app.use(sessionMiddleware);
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use('/static', express.static('./static'));

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

【问题讨论】:

    标签: javascript node.js authentication passport.js


    【解决方案1】:

    首先检查您的安装:

    npm install passport passport-local --save
    

    然后像下面这样导入护照:

    const passport = require('passport');
    const LocalStrategy = require('passport-local').Strategy;
    

    在您的 app.use() 方法之前:

    ...
    ..
    app.use(passport.initialize());
    app.use(passport.session());
    

    然后如下使用它。 (无需将“本地登录”作为第一个参数)

    passport.use(new LocalStrategy({
        usernameField : 'username',
        passwordField : 'password'
    }, (req, username, password, done) => {
         // Your logic here...
           ...
           .. 
      }));
    }
    

    终于在你的路由器中:

    app.post('/login/auth', passport.authenticate('local', { 
        successRedirect: '/dashboard', 
        failureRedirect: '/', 
        failureFlash: true }),
     function(req, res) {
        res.redirect('/');
     });
    

    更多信息: passport-local

    【讨论】:

    • 我应该在配置/护照中包含什么?我没有那个文件
    • 在 const LocalStrategy = require('passport-local').Strategy; 之前是这样的,但是没有用
    • @GhoSTBG 你遇到了什么错误?在您的目录中使用“npm list”命令检查您的安装。
    • 我想我通过留下空白空间来修复它,比如 passport.authenticate(' ', { successRedirect: '/dashboard' });
    猜你喜欢
    • 2022-07-19
    • 2017-05-25
    • 2016-02-28
    • 2022-01-11
    • 2014-02-22
    • 2021-12-15
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    相关资源
    最近更新 更多