【问题标题】:How can I fix authentication function in passport.js如何修复passport.js中的身份验证功能
【发布时间】:2020-05-19 21:12:54
【问题描述】:

我想用 Passport.js+Express 做认证功能。

但是如果我运行这段代码,我会在“req.user”中收到失败结果和空值。

我想找出问题所在,但是当我使用passport.authenticate() 时,localStrategy 中的console.log() 没有被调用。我不知道我必须修复哪里。

如何修复此代码以获得正确的功能?

-app.js

var express = require('express');
var bodyparser=require('body-parser');
var path = require('path');
var cookieParser = require('cookie-parser');
var passport = require('passport'); //passport module add
var localStrategy = require('passport-local').Strategy;
var cookieSession=require('cookie-session');

var index = require('./index.js');
var app=express();

app.use(cookieParser());

app.use(express.static(__dirname+'/views'));

app.use(cookieSession({
    keys : ['login'],
    cookie : {maxAge:1000*60*60} 
}));


app.set('views',__dirname+'/views');
app.set('view engine','html'); 
app.engine('html',require('ejs').renderFile);

app.use('/',index);

app.listen(8000,function(){
    console.log('server started');
});

module.exports=app;

-index.js

var express = require('express');
var router = express.Router();
var bodyparser=require('body-parser');
var crypto=require('crypto');
var passport=require('passport');
var localStrategy=require('passport-local').Strategy;

var mysql=require('mysql');

var config={
    host : 'localhost',
    port : 3306,
    user : 'root',
    password : 'xxxxxx',
    ssl : true
};

router.use(bodyparser.json());
router.use(passport.initialize());
router.use(passport.session());

const conn = new mysql.createConnection(config);

conn.connect(function(err){
    if(err){
        console.log('Cannot Connect to database : ');
        throw err;
    }
    else{
        console.log('Success to connect database');
    }
});

passport.use(new localStrategy({
    usernameField : 'username',
    passwordField : 'password',
},function(req,username,password,done){
        conn.query('USE Database');
        conn.query('select userID as username, userPWD as password from UserTable where userID=?',[username],function(err,userinfo,fields){
                    if(err){
                        return done(err);
                    }
                    else{
                        if(username==userinfo[0].username){
                                    var encryptHash=crypto.createHash('sha512').update(password);
                                    if(encryptHash===password){
                                                    return done(null,userinfo[0]);
                                    }
                                    console.log('login succeed');
                                    return done(null,userinfo[0]);
                        }
                        else{
                            return done(null,false);
                        }
          }
        });
    })
);

passport.serializeUser((user,done)=>{
    console.log("hello2");
    done(null, user.username);
});
passport.deserializeUser((id,done)=>{
    console.log("hello");
    var sql='select userID as username, userPWD as password from UserTable where userID=?';
    conn.query(sql,[id],(err,userinfo,fields)=>{
        if(err){
            console.log("error 발생 : "+err);
            res.status(500).send("Internal Server Error");
        }
        else{
            if(userinfo[0].username==id){
                done(null,userinfo[0]);
            }
        }
    });
});

router.get('/',function(req,res,next){
    console.log('homepage');
    res.render('index');
});

router.post('/login',passport.authenticate('local',{failureRedirect:'/',successRedirect:'/main'}));

module.exports=router;

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:
    You should check the "req" param  inside 
    function(req,username,password,done)
    
    may be this function takes only three parameters 
    **http://www.passportjs.org/packages/passport-local/**
    
    you should check what you get on post request through this `req` using this function
    

    【讨论】:

    • 我删除了 req 参数,但结果没有改变。
    • 请从每个地方删除fields参数并完成(null, false, { message: "该用户未注册" });在这行之后写console.log("error 발생 : "+err)done(err, user);
    猜你喜欢
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 2014-10-25
    • 1970-01-01
    • 2015-01-09
    • 2013-06-29
    • 2023-04-03
    相关资源
    最近更新 更多