【问题标题】:passport.authenticate() failingpassport.authenticate() 失败
【发布时间】:2021-04-04 20:30:16
【问题描述】:

所以我有一个登录表单,它向 app.js 发出 POST 请求:

//app.js file
const express = require("express");
const ejs = require("ejs");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const { check } = require('express-validator');
const passport = require("passport");
const session = require("express-session");

const UserLogin = require("./middlwares/user-login");
const User = require("./database/Users");

const app = express();

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

//setting sessions and passport
app.use(session({
    secret: "Our little Secret for Sessions.",
    resave: false,
    saveUninitialized: false
}));

app.use(passport.initialize());
app.use(passport.session());

//Serializing and deserializing user for checking login status in cookie
passport.use(User.createStrategy());

passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

app.post("/login", UserLogin);

然后身份验证发生在 user-login.js 中,它具有 Passport.authenticate()。这适用于另一个教程示例,我在主 app.js 本身中进行身份验证。但是在这里,验证功能没有执行。我完全不明白为什么。我不知道如何调查执行 passport.authenticate() 时会发生什么。我尝试浏览文档,但无法弄清楚它失败的原因。只是想在自己的项目中实现我学到的东西。

//user-login.js
const mongoose = require("mongoose");
const passport = require("passport");
const User = require("../database/Users");


module.exports = async (req, res) => {
    const user = new User({
        username: req.body.loginEmail,
        password: req.body.loginPassword
    });

    console.log(user.username + " and " + user.password);
    req.login(user, function(err){
        if (err) {
            console.log("user log-in triggered but error: " + err);
        } else {
            console.log("before authenticate");
            passport.authenticate("local")(req, res, function(){
            console.log("after authenticate");
                res.render("user-logged-in", {});
            });
            
        }
    });

有什么帮助吗?刚开始使用stackOverflow,如果代码转储是一个不好的提问方式,我们深表歉意。我也不明白这种语法 - passport.authenticate('local')(req, res, function(){});

【问题讨论】:

    标签: node.js mongoose passport.js passport-local


    【解决方案1】:

    好的,我刚刚意识到发出 POST 请求的表单需要将其字段命名为用户名和密码才能让 passport.authenticate() 工作?这似乎是一种奇怪的强迫。在我的 html 表单中,我将其命名为“loginEmail”,因为这也是我用于最终用户的标签,这也是导致 passport.authenticate() 失败的原因。

    不是文件结构,也不是什么晦涩难懂的原因!

    【讨论】:

      猜你喜欢
      • 2019-10-27
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 2018-04-18
      • 1970-01-01
      • 2017-04-18
      相关资源
      最近更新 更多