gpt4 book ai didi

node.js - Passport : Unknown authentication strategy "local"

转载 作者:IT老高 更新时间:2023-10-28 23:23:21 25 4
gpt4 key购买 nike

我是 NodeJS 的新手,我尝试构建一个登录/注册系统。注册工作正常,但我目前无法登录。

我找到了一个使用 passport 和 nodejs 的示例应用程序,因此基于这个示例我构建了注册表单和登录表单。 http://blog.robertonodi.me/node-authentication-series-email-and-password/

当我尝试登录时,我收到 'Unknown authentication strategy "local"error'。谁能解释我做错了什么?

我的代码

(编辑:添加了答案/评论和文件名的一些更改)

快速配置 (config/express.config.js)

app.use(session({
store: new MongoStore({
url: 'mongodb://' + config.url + ':' + config.port + '/' + config.name
}),
secret: 'secretkey',
key: 'skey.sid',
resave: false,
saveUninitialized: false,
cookie : {
maxAge: 604800000 //7 days in miliseconds
}
}));

app.use(passport.initialize());
app.use(passport.session());
require(path.join(__dirname, 'auth.config'))(passport); //Load passport config

app.use(function(req, res, next) {
req.resources = req.resources || {};
// res.locals.app = config.app;
res.locals.currentUser = req.user;
res.locals._t = function (value) { return value; };
res.locals._s = function (obj) { return JSON.stringify(obj); };
next();
})

Passport 配置(config/auth.config.js)

var path = require('path');

var passport=require('passport');
var User = require(path.join(__dirname, '..', 'models', 'user.model'));

module.exports = function(passport) {

passport.serializeUser(function(user, done){
done(null, false);
});
passport.deserializeUser(function(id, done){
console.log("deserializeUser called", id);
User.findById(id, function (err, user) {
done(err, user);
});
});

//load strategy files
require(path.join(__dirname, 'strategies', 'local-strategy'));
//TODO: Facebook
//TODO: Twitter
//TODO: Google
}

本地策略 (/config/strategies/local-strategy.js)

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

module.exports = function () {
console.log("LocalStrategy called");
passport.use(new LocalStrategy({
usernameField : 'username',
passwordField : 'password'
},
function(username, password, done) {
User.authenticate(username, password, function(err, user) {
if (err) {
return done(err);
}

if(!user) {
return done(null, false, {message: 'Invalid username or password'});
}

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

身份验证 Controller (仅限登录)(/controllers/auth.controller.js)

module.exports.loginUser = function(req,res, next) {
console.log("Auth.config", path.join(__dirname, 'strategies', 'local-strategy'))
passport.authenticate('local', function (err, user, info) {
if (err || !user) {
console.log("Error", info);
return res.status(400).send(info);
}

req.logIn(user, function(err) {
if (err) {
return next(err);
// return res.status(404).send("Username or password incorrect");
}
})

res.status(200).json(user);
})(req, res, next);
}

最佳答案

您忘记在 app.js 中导入 Passport 配置文件。

import passport config 在初始化 passport 之后。

app.use(passport.initialize());
app.use(passport.session());
// Add the line below, which you're missing:
require('./path/to/passport/config/file')(passport);

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com