[英]Express/passport - passport.authenticate is not a function
我是passport.js的新手。 我一直在關注以下博客注冊用戶
https://scotch.io/tutorials/easy-node-authentication-setup-and-local
但是每次我運行服務器並加載/register
頁面時,它都會顯示上述錯誤
類型錯誤:passport.authenticate 不是 module.exports (/home/punit/Documents/****/routes/index.js:10:34) at Layer.handle [as handle_request] (/home/punit/文檔/****/node_modules/express/lib/router/layer.js:95:5) at trim_prefix (/home/punit/Documents/****/node_modules/express/lib/router/index.js: 312:13) 在 /home/punit/Documents/****/node_modules/express/lib/router/index.js:280:7 在 Function.process_params (/home/punit/Documents/****/node_modules /express/lib/router/index.js:330:12) 在下一個 (/home/punit/Documents/****/node_modules/express/lib/router/index.js:271:10) 在 /home/ punit/Documents/****/node_modules/connect-flash/lib/flash.js:21:5 at Layer.handle [as handle_request] (/home/punit/Documents/****/node_modules/express/lib /router/layer.js:95:5)
我檢查了變量是否填充在 /routes/index.js 文件中。
var mongoose = require('mongoose');
var passport = require('passport');
var flash = require('connect-flash');
var session = require('express-session');
var routes = require('./routes/index');
var users = require('./routes/users');
mongoose.connect("localhost:27017/****");
require('./models/strategies')(passport)
var app = express();
session初始化如下
app.use(session({
secret: '*******',
resave: true,
saveUninitialized: false
})); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session
app.use('/', routes);
app.use('/users', users);
app.use('/register', routes);
require('./routes/index')(app, passport)
strategy.js 文件如下
var LocalStrategy = require('passport-local').Strategy
var Profile = require('./profile.js')
var ex = function (passport) {
passport.serializeUser(function (user, done) {
done(null, user.id)
});
passport.deserializeUser(function (id, done) {
Profile.findById(_id, function (err, user) {
done(err, user)
});
});
passport.use('register', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
},
function(req, mobile, password, done) {
process.nextTick(function() {
return done(null, false);
});
}))
}
console.log(ex)
module.exports = ex;
和 routes/index.js 文件如下
module.exports = function (app, passport) {
/* GET home page. */
app.get('/login', function(req, res, next) {
res.render('index', { title: 'Express' });
});
app.get('/register', function(req, res, next) {
res.render('register', { title: 'Express' });
});
app.post('/register', passport.authenticate('register', {
successRedirect: '/profile',
faliureRedirect: '/register',
faliureFlash: true // allows flash message
}), function(req, res, err) {
console.log(req)
})
}
任何形式的幫助將不勝感激。
您應該在路由文件中使用路由器或通過app
只有一個會起作用。
//app.use('/', routes);
//app.use('/users', users);
//app.use('/register', routes);
require('./routes/index')(app, passport)
這樣,護照對象將在路由文件中可用。
可能不是最好的答案,但應該適用於您的情況,更改 strategy.js 文件:
var LocalStrategy = require('passport-local').Strategy
var Profile = require('./profile.js')
var ex = function (passport) {
return (
passport.serializeUser(function (user, done) {
done(null, user.id)
});
passport.deserializeUser(function (id, done) {
Profile.findById(_id, function (err, user) {
done(err, user)
});
});
passport.use('register', new LocalStrategy({
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true
},
function(req, mobile, password, done) {
process.nextTick(function() {
return done(null, false);
});
}))
)
}
console.log(ex)
module.exports = ex;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.