簡體   English   中英

password.js身份驗證失敗

[英]passportjs authentication failed

我正在嘗試首次使用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);

        bcrypt.compare(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){...})

我想你可能要么需要把你的passport.use在index.js文件的路徑,或以某種方式通過passport在app.js創建的實例作為參數傳遞給index.js

你能嘗試一下嗎? 每次您需要時都可能創建一個新實例(“ passport”)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM