最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

passportjs身份验证失败

IT培训 admin 3浏览 0评论

passportjs身份验证失败

我是第一次尝试使用passportjs对用户进行身份验证,但我一直无法让它工作。所以这是我正在使用的相关代码

Index.js路由文件

var express = require('express');
var router = express.Router();
var passport = require('passport');
var bcrypt = require('bcryptjs');

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

app.js

// Authentication packages
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var MySQLStore = require('express-mysql-session')(session);
var bcrypt = require('bcryptjs');

passport.use(new LocalStrategy(function(email, password, done) {
    console.log(email);
    console.log(password);

    res.locals.connection.query('SELECT id, password FROM users WHERE email = ?', [email], function(err, user) {
        console.log(user);

        if (err) {return done(err)};

        if (user.length === 0) {
            done(null, false);
        };

        const hash = user[0].password.toString();
        console.log(hash);

        bcryptpare(password, hash, function(err, res) {
            if (res === true) {
                return done(null, {user_id: user[0].id});
            } else {
                return done(null, false);
            }
        });
    });
}
));

当我输入有效的电子邮件地址和密码时,我不会像我想的那样被重定向到家中。相反,我被重定向回登录页面。当我使用无效的电子邮件地址时会发生同样的事情即使我在提交登录表单时尝试控制日志,我也看不到电子邮件和密码。

请有人帮帮我。

回答如下:

我注意到你有email作为用户名。我遇到了类似的问题,发现解决方案只是将usernameField添加到策略选项中:

new LocalStrategy({usernameField: 'email'}, function(email, password, done){...})

passportjs身份验证失败

我是第一次尝试使用passportjs对用户进行身份验证,但我一直无法让它工作。所以这是我正在使用的相关代码

Index.js路由文件

var express = require('express');
var router = express.Router();
var passport = require('passport');
var bcrypt = require('bcryptjs');

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

app.js

// Authentication packages
var session = require('express-session');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var MySQLStore = require('express-mysql-session')(session);
var bcrypt = require('bcryptjs');

passport.use(new LocalStrategy(function(email, password, done) {
    console.log(email);
    console.log(password);

    res.locals.connection.query('SELECT id, password FROM users WHERE email = ?', [email], function(err, user) {
        console.log(user);

        if (err) {return done(err)};

        if (user.length === 0) {
            done(null, false);
        };

        const hash = user[0].password.toString();
        console.log(hash);

        bcryptpare(password, hash, function(err, res) {
            if (res === true) {
                return done(null, {user_id: user[0].id});
            } else {
                return done(null, false);
            }
        });
    });
}
));

当我输入有效的电子邮件地址和密码时,我不会像我想的那样被重定向到家中。相反,我被重定向回登录页面。当我使用无效的电子邮件地址时会发生同样的事情即使我在提交登录表单时尝试控制日志,我也看不到电子邮件和密码。

请有人帮帮我。

回答如下:

我注意到你有email作为用户名。我遇到了类似的问题,发现解决方案只是将usernameField添加到策略选项中:

new LocalStrategy({usernameField: 'email'}, function(email, password, done){...})

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论