Passport - TypeError:passport.authenticate不是函数

时间:2017-04-06 07:41:52

标签: javascript express passport.js passport-local

我正在尝试对我的应用程序实施passport身份验证策略,但在尝试登录后仍然出现以下错误:

  

TypeError:passport.autign不是exports.signin

中的函数

我很确定我错过了一些东西但却无法弄清楚那会是什么。由于user模型中没有任何与身份验证相关的内容,因此我决定不在此输出。

我的文件夹结构如下:

|-- project
    |-- .env
    |-- index.html
    |-- package.json
    |-- server.js
    |-- app
    |   |-- config
    |   |   |-- passport.js
    |   |   |-- routes.js
    |   |   |-- test.js
    |   |   |-- passport
    |   |       |-- local.js
    |   |-- controllers
    |   |   |-- users.js
    |   |-- models
    |       |-- user.js

这是我的routes.js文件

/* Config / Routes */

'use strict';
const users = require('../controllers/users');

module.exports = function(app) {
    app.post('/login', users.signin);
    app.post('/users', users.create);
};

以下是local.js的{​​{1}}:

LocalStrategy

这是我的/* Config / Passport / Local */ 'use strict'; const mongoose = require('mongoose'); const LocalStrategy = require('passport-local').Strategy; const User = mongoose.model('User'); module.exports = new LocalStrategy({ usernameField: 'email' }, function(email, password, done) { User.findOne({email: email }, function (err, user) { if (err) return done(err); if (!user) return done(null, false, { message: 'Unknown user' }); if(!user.validPassword(password)) return done(null, false, { message: 'Invalid password' }); return done(null, user); }); } ); 文件,其中passport.js已分配给LocalStrategy

passport

这是我的/* Config / Passport */ 'use strict'; const mongoose = require('mongoose'); const User = mongoose.model('User'); const local = require('./passport/local'); module.exports = function(passport) { passport.use(local); }; 控制器文件:

users.js

最后,我的/* Controller / Users */ 'use strict'; const mongoose = require('mongoose'); const User = mongoose.model('User'); const only = require('only'); const passport = require('../config/passport'); /* Creates a new user */ exports.create = function(req, res) { // create a new user object of request body const user = new User(only(req.body, 'firstName lastName email password')); // attempting to create a new user user.save(function (err, user) { if(err) { // output validation errors return res.json(err); } // output created user return res.json(user); }); }; exports.signin = function(req, res, next) { passport.authenticate('local', function (err, user, info) { if (err) return next(err); if (!user) return res.status(401).json({message: info.message}); req.logIn(user, function(err) { next(err) }); res.json(req.user); })(req, res, next) }; 文件:

server.js

2 个答案:

答案 0 :(得分:0)

在users.js文件中,更改以下行

const passport = require('../config/passport');

const passport = require('passport');

我面临着同样的问题。我们必须导入库,而不是我们在config文件夹中创建的passport.js。

答案 1 :(得分:-1)

就我而言,它与 import passport from "passport";