【问题标题】:Implementing passport, getting bad request实施护照,收到错误的请求
【发布时间】:2018-10-23 10:41:22
【问题描述】:

我正在尝试通过在 node.js 应用程序上使用 passport.js 来实现身份验证,但得到了一个

错误的请求

当我发布到 /login 时返回。

我已经测试了路线,它运行良好,但每次我插入 passport.authenticate() 时都会收到这个错误的请求错误。

我错过了什么?

这是我的代码

server.js

const express = require("express");
const app = express();
const bp = require("body-parser");
const User = require("./db").user;
const Investment = require("./db").investment;
const spending = require("./db").spendings;
const reminder = require("./db").reminder;
const session = require("express-session");
const passport = require('passport');
const flash = require("connect-flash");
const LocalStrategy = require("passport-local").Strategy;

require("./config/passport")(passport);

app.use("/", express.static(__dirname + "/Public_static"));
app.use(bp.urlencoded({ extended: true }));
app.use(bp.json());

//Passport Authentication Implementation
app.use(session({ secret: "keyboard cat", resave: true, saveUninitialized: true })); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash());

app.post("/login", passport.authenticate("local"), function(req, res) {
    User.findOne({
        where: { email: req.body.username }
    })
        .then(function(user) {
            console.log(user);
            user._modelOptions.classMethods.test();
        })
        .catch(function(err) {
            console.log(err);
        });
});

app.listen(3100, function() {
    console.log("Server started on http://localhost:3100");
});

/config/passport.js

const User = require("../db").user;
const LocalStrategy = require("passport-local").Strategy;

module.exports = function(passport) {

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

    passport.deserializeUser(function(id, done) {
        User.findOne({where:{id:id}})
    });

    passport.use(new LocalStrategy(
            {
                passReqToCallback: true // allows us to pass back the entire request to the callback
            },
            (req, username, password, done) => {
                User.findOne({where: { username: username }})
                .then((user)=>{
                    console.log("User found")
                })
                .catch(()=>{
                    console.log(err)
                })
            }
        )
    );


};

【问题讨论】:

    标签: javascript node.js authentication passport.js


    【解决方案1】:

    您可以尝试将您的 passport.js 文件更改为:

    const User = require("../db").user;
    const LocalStrategy = require("passport-local").Strategy;
    const Promise = require("bluebird");
    
    module.exports = function(passport) {
    
        passport.serializeUser((user, done) => done(null, user.id));
    
        passport.deserializeUser((id, done) =>
            Promise.try(() => User.findById(id))
                .asCallback(done)
        );
    
        passport.use(new LocalStrategy(
                {
                    passReqToCallback: true // allows us to pass back the entire request to the callback
                },
                (req, username, password, done) => {
                    User.findOne({where: { username: username }})
                    .then(user =>{
                        console.log("User found")
                        return done(null, user, {message: 'User found!'});
                    })
                    .catch(err => {
                        console.log(err)
                        return done('Unauthorized', false, {message: err.message});
                    })
                }
            )
        );
    
    
    };
    

    【讨论】:

    • 我改变了它,我仍然得到同样的错误请求错误。
    • 我的错,我错误地配置了邮递员!感谢@Svetoslav Petrov 的帮助
    猜你喜欢
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2019-01-30
    • 1970-01-01
    • 2017-04-02
    • 2012-12-03
    • 2021-07-25
    相关资源
    最近更新 更多