passport.authenticate(...) 如何从用户那里获取值?

编程入门 行业动态 更新时间:2024-10-05 17:20:14

passport.authenticate(...) 如何从<a href=https://www.elefans.com/category/jswz/34/1771412.html style=用户那里获取值?"/>

passport.authenticate(...) 如何从用户那里获取值?

顶层代码

require('dotenv').config()
const express= require("express")
const ejs=require("ejs")
const bodyParser=require("body-parser")
const mongoose =require("mongoose")
const session=require("express-session")
const passport=require("passport")
const passportLocalMongoose=require("passport-local-mongoose")

const app= express()

const saltRounds = 10;
const PORT=3000||process.env.PORT

app.use(bodyParser.urlencoded({extended:true}))
app.use(express.static("public"))
app.set('view engine',"ejs")

app.use(session({
    secret:"My secret",
    resave:false,
    saveUninitialized:false,
}))
app.use(passport.initialize())
app.use(passport.session())
const uri='mongodb://127.0.0.1:27017/userDB'

const MongoConnect=async()=>{
    try {
        await mongoose.connect(uri);
        console.log("Connected Succesfully")
    }
     catch (error) {
        console.log(error);
    }
    
}
const userSchema= new mongoose.Schema({
    email:String,
    password:String
})
userSchema.plugin(passportLocalMongoose)



 const user= new mongoose.model("user",userSchema)

 passport.use(user.createStrategy());

 passport.serializeUser(function(user, done) {
    done(null, user);
  });
  
  passport.deserializeUser(function(user, done) {
    done(null, user);
  });

app.route("/")

.get((req,res)=>{
res.render("home")
})


app.route("/login")

.get((req,res)=>{
res.render("login")
})
//-----------------------------THE "PROBLEM"--------------------
.post((req,res)=>{

        passport.authenticate("local",{ failureRedirect: '/login', failureMessage: true })(req,res,function () {
            res.redirect("/secrets")
 
    
  })
})
//-------------------------------------------------
app.route("/register")

.get((req,res)=>{
res.render("register")
})

.post((req,res)=>
{
    user.register({username:req.body.username},req.body.password,(err,user) =>{
        if(err)
        {
            console.log(err)
            res.redirect("/register")
        }
        else{
            passport.authenticate("local")(req,res,function () {
                res.redirect("/secrets")
                
            })
            
        }
    })
    
})


app.get("/secrets",function (req,res) {
    console.log(req.isAuthenticated())
    if(req.isAuthenticated()){
        res.render("secrets")
    }
    else{
        res.redirect("/login")
    }
})

app.get('/logout', function(req, res, next){
    req.logout(function(err) {
      if (err) { return next(err); }
      res.redirect('/');
    });
  });
MongoConnect(). then(()=>{
    app.listen(PORT,()=>
    {
        console.log("Server is Running on port 3000")
    })

})
.catch((err)=>{
   console.log(err)

})
Faulty code

所以我有这段代码,但我不知道 passport.authenticate 如何获取用户的输入。没有body parser,在没有bodyparser的情况下,它如何在数据库中进行比较。

在我尝试上面的代码之前,我实现了下面的代码(req.login),它给了我一些问题,即使我写错了密码,我仍然能够通过路由 localhost:3000/secrets ,所以我更改了它并添加了 passport.authenticate(..) 函数并解决了问题,但我根本不明白为什么它会起作用。 passport.authenticate(..) 如何在没有 body-parser 的情况下获取用户的输入。

.post((req,res)=>{
   const user1 =new user({
    username:req.body.usermame,
    password:req.body.password
   })


   req.login(user1,function (err) {
    if(err)
    console.log(err)
    else{
        passport.authenticate("local",{ failureRedirect: '/login', failureMessage: true })(req,res,function () {
            res.redirect("/secrets")
            
        })
    }
    
  })
})
回答如下:
  1. 你使用

    passport-local-mongoose
    作为
    loxal
    策略

  2. passport-local-mongoose
    使用
    passport-local

  3. passport-local
    检查
    req.body.username
    req.body.password

源码:

var username = lookup(req.body, this._usernameField) || lookup(req.query, this._usernameField);
var password = lookup(req.body, this._passwordField) || lookup(req.query, this._passwordField);

更多推荐

passport.authenticate(...) 如何从用户那里获取值?

本文发布于:2024-05-28 11:58:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1770137.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:用户   passport   authenticate

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!