【问题标题】:Passport.js .authenticate() throwing TypeError: undefined is not a functionPassport.js .authenticate() 抛出 TypeError: undefined is not a function
【发布时间】:2015-11-06 20:00:50
【问题描述】:

我是新的护照(和一般节点),并一直在使用本教程 (http://mherman.org/blog/2015/01/31/local-authentication-with-passport-and-express-4/#.VczPbTBViko) 将护照身份验证添加到更大的网络应用程序。我想我一直在正确地跟踪事情,但是当我在终端中启动应用程序时,我收到以下错误。

passport.use(new LocalStrategy(Admin.authenticate()));
                                     ^
TypeError: undefined is not a function
    at Object.<anonymous> (/Users/goldru/design-data/app.js:37:38)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/Users/goldru/design-data/bin/www:7:11)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

我检查了 package.json 并且所有相关库似乎都已安装。

这里是相关代码。

来自 app.js:

//connect to db; require models
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/design-data-test');
var Test = require('./models/Tests');
var Question = require('./models/Question');
var User = require('./models/User');
var Option = require('./models/Option');
var Admin = require('./models/Admin');

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

var routes = require('./routes/index');

var express = require('express');
var app = express();

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

//passport setup
app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);

//config admin
var Admin = require('./models/Admin');
passport.use(new LocalStrategy(Admin.authenticate()));
passport.serializeUser(Admin.serializeUser());
passport.deserializeUser(Admin.deserializeUser());

admin.js:

var mongoose = require('mongoose');
var passportLocalMongoose = require('passport-local-mongoose')

var AdminSchema = new mongoose.Schema({
    username: String,
    password: String
});

AdminSchema.plugin(passportLocalMongoose);

module.export = mongoose.model('Admin', AdminSchema);

【问题讨论】:

  • 可以编辑你的问题并显示部分Admin,尤其是authenticate、serializeUser和deserializeUser的定义吗?
  • Admin 是一个猫鼬模型——我使用的教程没有指定向其中添加这些功能。我认为它们是护照功能
  • 它们很可能是插件添加的功能。现在看到,我猜你的问题是笔误。
  • 这个改变有效吗?
  • 删除空括号?没有

标签: node.js express passport.js


【解决方案1】:

这是一个错字。您必须在 admin.js 中使用 module.exports 而不是 module.export。

【讨论】:

  • 是回调,不需要是函数吗?
  • 是的,它应该是一个函数。但是你不应该在 app.js 中调用它。仅指定其名称。
  • hmm... 删除空括号时出现以下错误
  • throw new TypeError('LocalStrategy 需要验证回调
  • 您是否按照教程中的建议使用passport-local-mongoose?在此处发布models/Admin 的内容也会有所帮助。
猜你喜欢
  • 2015-06-24
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 2015-01-14
  • 2014-07-06
  • 2014-09-01
  • 2020-02-15
相关资源
最近更新 更多