TypeError: req.logIn не является функцией - Passport JS - PullRequest
0 голосов
/ 03 февраля 2020

Я почти уверен, что это не ошибка, поскольку поиск в Google ничего не дал.

Я использую паспорт JS с местной стратегией. В моем маршруте входа в систему я использую пользовательский обратный вызов и вызываю req.login, как только я определил, что пользователь существует, потому что в документации сказано:

Обратите внимание, что при использовании пользовательского обратного вызова это становится обязанностью приложения. установить sh сеанс (путем вызова req.login ()) и отправить ответ

Тем не менее, он продолжает говорить, что reg.logIn не определен (обратите внимание, что вы можете вызвать любой из reg.login или req.logIn, так как они псевдонимы. Я также пробовал оба). Моя среда IDE выбирает определения машинописного текста, и я вижу функцию req.logIn, определенную в выходных данных файла скомпилированного приложения. js, поэтому я не уверен, почему я получаю эту ошибку.

app.ts

const localStrategy = LocalStrategy.Strategy;

passport.use(new localStrategy({
        usernameField: 'email',
        passwordField: 'password'
    },
    async function (email, password, done) {
        const member: IMember | null = await MemberModel.findOne({where: {email: email}});
        if (member) {
            bcrypt.compare(password, member.hash, function (err, res) {
                if (err) return done(null, false, {message: err.message});
                if (!res) {
                    return done(null, false, {message: 'Incorrect password.'});
                } else {
                    return done(null, member);
                }
            });
        }
        else {
            return done(null, false, {message: 'Couldn\'t find a matching user.'});
        }
    }
));

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

passport.deserializeUser(async function(id: string[], done) {
    const user: IMember | null = await MemberModel.findOne({where: {id: id}});
    if (user) {
        done(null, user);
    }
});

// Initialize the app
const app: e.Express = express();

app.use(bodyParser.json());
app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());

app.post('/login', (req, res, next) => {
    passport.authenticate('local', (err, user, options) => {
        if (err) {
            return next(err);
        }
        if (!user) {
            return next(options.message);
        }
        req.logIn(user, ((err) => { // <-- Errors on this line 
            if (err) {
                return next(err); }
            return res.redirect('/users/' + user.username);
        }));
    })(req, res, next);
});

Версии


    "express": "^4.17.1",
    "express-session": "^1.17.0",
    "passport": "^0.4.1",
    "passport-local": "^1.0.0",
    "typescript": "^3.7.4",
    "@types/express-session": "^1.15.16",
    "@types/passport": "^1.0.2",
    "@types/passport-local": "^1.0.33",
    "@types/express": "^4.17.2",

1 Ответ

0 голосов
/ 03 февраля 2020
req.logIn(user, ((err) => { // <-- Errors on this line 
    if (err) {
        return next(err); }
    return res.redirect('/users/' + user.username);
}));

попробуй req.login без верблюжьей шкатулки, как видно на http://www.passportjs.org/docs/login/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...