代码之家  ›  专栏  ›  技术社区  ›  Suhail Gupta

Passportjs始终无法通过身份验证

  •  0
  • Suhail Gupta  · 技术社区  · 7 年前

    我正在尝试使用 passportjs 使用以下代码。

    所以当用户转到 http://localhost:3000 ,他应自动重定向到 /hello 但实际上,它重定向到 /hello?failure .

    我尝试过调试,四处看看,但没有找到问题和解决方案。

    const express = require('express');
    const passport = require('passport');
    const LocalStrategy = require('passport-local').Strategy;
    const session = require('express-session');
    
    
    let app = express();
    
    app.use(session({
        secret: 'mysecret',
        cookie: {
            secure: false
        },
        resave: true,
        saveUninitialized: true
    }
    ));
    
    app.use(passport.initialize());
    app.use(passport.session()); // persistent login sessions
    
    passport.use('local-login', new LocalStrategy(function (username, password, done) {
    
        console.log(username + ' username ');
        console.log(password + ' password ');
    
        return done(null, { name: 'suhail' });
    }));
    
    
    passport.serializeUser(function (user, done) {
        console.log(user, ' serialize ');
        done(null, user.name);
    });
    
    passport.deserializeUser(function (id, done) {
        console.log(id, ' deserialize ');
        done(null, { name: 'suhail' });
    });
    
    app.get('/', passport.authenticate('local-login', { successRedirect: '/hello', failureRedirect: '/hello?failure' }));
    
    
    app.get('/hello', (req, resp, next) => resp.send('hello').end());
    
    app.listen(3000);
    

    我错过了什么?应该转到 http://localhost:3000/hello 因为中间件总是解决问题。

    注: -未调用任何定义的中间件。它只是重定向到 /喂?失败 当GET请求 / 是制造的。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Johannes Merz    7 年前

    您没有在get请求中提供用户名和密码。因此,永远不会调用Strategycallback。

    尝试在路由前面添加此中间件,以了解我的意思:

    app.use((req, res, next) => {
        // fake body content for authentication
        req.body = {username: 'devil', password: '666'}
        next()
    })
    app.get('/', passport.authenticate('local-login', { successRedirect: '/hello', failureRedirect: '/hello?failure' }));