Я почти уверен, что это не ошибка, поскольку поиск в 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",