我试图用passport.js为我的身份验证构建一个本地策略,它可以与社交登录一起使用,但由于某种原因,相同的代码导致“TypeError:passport_local_1.LocalStrategy不是构造函数“错误,当与本地策略一起使用时
local-auth.ts
import * as passport from 'passport';
import { LocalStrategy as Strategy } from 'passport-local';
import User, { UserDocument } from './models/User';
import bcrypt from 'bcrypt';
function setupLocal({ server }) {
const verify = async (email, password, cb) => {
try {
const user = await User.findByCredentials(email, password);
return cb(null, user);
} catch (err) {
return cb(null, false, {
message: 'Invalid login credentials',
});
}
};
passport.use(new Strategy({ usernameField: 'email' }, verify));
passport.serializeUser((user: UserDocument, cb) => {
cb(null, user._id);
});
passport.deserializeUser((id, cb) => {
User.findById(id, User.publicFields()).exec((err, user) => {
cb(err, user);
});
});
server.use(passport.session());
server.use(passport.authenticate('session'));
server.get('/login', (res) => {
res.render('login');
});
server.post(
'/login/password',
passport.authenticate('local', {
successRedirect: '/',
failureRedirect: '/login',
}),
);
server.get('/signup', (res) => {
res.render('signup');
});
server.post('/signup', async (req, res, next) => {
const saltRounds = 10;
try {
const hashedPassword = await bcrypt.hash(req.body.password, saltRounds);
const user = new User({
email: req.body.email,
password: hashedPassword,
});
await user.save();
req.login(user, (err) => {
if (err) {
return next(err);
}
res.redirect('/');
});
} catch (err) {
return next(err);
}
});
server.post('/logout', (req, res, next) => {
req.logout((err) => {
if (err) {
return next(err);
}
res.redirect('/');
});
});
}
export { setupLocal };
我在谷歌认证中有相同的导入
import * as passport from 'passport';
import { OAuth2Strategy as Strategy } from 'passport-google-oauth';
和类似的外观验证功能和使用在谷歌认证
passport.use(
new Strategy(
{
clientID: process.env.GOOGLE_CLIENTID,
clientSecret: process.env.GOOGLE_CLIENTSECRET,
callbackURL: `${dev ? process.env.URL_API : process.env.PRODUCTION_URL_API}/oauth2callback`,
passReqToCallback: true,
},
verify,
),
);
调用设置函数
setupGoogle({ server });
setupLocal({ server });
1条答案
按热度按时间nbysray51#
出于某种原因,它需要像这样导入: