node.js - Passport js本地策略没有被调用
问题描述
这是我的 app.js
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const cors = require('cors');
const passport = require('passport');
const app = express();
app.use(cors());
//Mongodb connection
mongoose.connect("mongodb://localhost/expressWithAngular")
.then(() => {
console.log("mongodb connected");
})
//bodyparser middleware
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
//load routes
const users = require("./routes/users");
//include passport
require("./config/passport")(passport);
// use routes
app.use('/user' , users);
app.get('' ,(req,res) => {
res.send('home');
})
const port = 5000;
app.listen(port , () => {
console.log(`server is running in port ${port}`);
})
这是我的用户路由 routes/user.js
const express = require('express');
const mongoose = require('mongoose');
const router = express.Router();
const bcrypt = require('bcryptjs');
const passport = require('passport');
//user model init
require('./../models/User');
const User = mongoose.model('users');
router.post('/login' , (req,res,next)=>{
console.log("bodyparser" ,req.body);
passport.authenticate('local',{
session: false
},function(req,res,next){
console.log(res);
})
})
module.exports = 路由器;
这是我的配置/passport.js
const LocalStrategy = require('passport-local').Strategy;
const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const User = mongoose.model('users');
module.exports = function(passport){
passport.use(new LocalStrategy(
{
usernameField : 'email'
},
function(email,password,done){
console.log(email);
}
))
}
- 我试图将我的平均堆栈应用程序与护照身份验证连接起来,我能够将详细信息发送到后端,但我无法将值传递给本地策略 - 当我安慰本地策略时,我不知道我错过了哪里没有被调用,请纠正我丢失的地方
解决方案
我相信你的路由器配置有问题。passport.authenticate
正在为您生成中间件,但在您的情况下,您已将其包装在函数中,因此您可以记录输入参数并且您尚未将生成的中间件返回给路由器:
router.post('/login' , (req,res,next)=>{
console.log("bodyparser" ,req.body);
passport.authenticate('local',{
session: false
},function(req,res,next){
console.log(res);
})
})
我建议您修改代码以像官方文档中的示例一样工作:
router.post('/login' , passport.authenticate('local',{
session: false
});
)
如果您真的需要登录req.body
,只需在身份验证之前添加一个中间件,如下所示:
router.post('/login' , (req, res, next) {
console.log("bodyparser" ,req.body);
next();
},
passport.authenticate('local', {session: false});
)
推荐阅读
- firebase - Firebase Cloud Functions 使用 NPM 8 部署异步函数
- python - Tensorflow:无法使用数据集 API 创建具有相应标签的数据集
- javascript - JavaScript:是否可以将 JavaScript 变量作为文件发布
- mongodb - 在 mongodb 中查找具有 id 数组的数据?
- sql - 按日期间隔大于 X 的 DATETIME 获取数据、计数和分组
- sql - 当与其他人相等时添加到列
- python - Opencv:Jetmap或colormap转灰度,反向applyColorMap()
- java - java.lang.ClassNotFoundException: con.mysql.jdbc.Driver 1
- python - Flask Forms if 语句返回
- laravel - 如何跨多个时区处理 Laravel 应用程序