【问题标题】:Passport js local strategy is not being calledPassport js本地策略没有被调用
【发布时间】:2019-03-19 21:40:18
【问题描述】:

这是我的 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);
       }
    ))
}

- 我试图将我的平均堆栈应用程序与护照连接起来 身份验证,我可以将详细信息发送到后端,但我不能 将值传递给本地策略 - 我不知道我在哪里失踪,当我安慰当地的策略是 没有打电话,请纠正我丢失的地方

【问题讨论】:

    标签: node.js passport.js mean


    【解决方案1】:

    我相信您的路由器配置有问题。 passport.authenticate 对您来说是 generating middleware,但在您的情况下,您已将其包装在函数中,因此您可以记录输入参数并且您尚未将生成的中间件返回给路由器:

    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});
    )
    

    【讨论】:

      猜你喜欢
      • 2018-09-14
      • 1970-01-01
      • 2023-04-05
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2015-07-20
      相关资源
      最近更新 更多