我正在尝试对我的应用程序实施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
答案 0 :(得分:0)
在users.js文件中,更改以下行
const passport = require('../config/passport');
到
const passport = require('passport');
我面临着同样的问题。我们必须导入库,而不是我们在config文件夹中创建的passport.js。
答案 1 :(得分:-1)
就我而言,它与
import passport from "passport";