首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查passport-local中是否存在用户

检查passport-local中是否存在用户
EN

Stack Overflow用户
提问于 2016-06-14 22:14:03
回答 1查看 1.8K关注 0票数 0

我有一个Express应用程序,使用本地护照策略,使用Mongoose存储用户帐户。我让一个自由职业者为我写了这部分应用程序,因为我不知道如何从头到尾构建登录系统(我找到的每个教程都是以不同的方式完成的)。这样做的缺点是我不了解每个部分的作用。这是在我的app.js文件中:

代码语言:javascript
复制
const Account = require('./models/db/AccountsSchema');

app.use(passport.initialize());
app.use(passport.session());

passport.use(new LocalStrategy(Account.authenticate()));
passport.serializeUser(Account.serializeUser());
passport.deserializeUser(Account.deserializeUser());

这是routes/index.js格式的

代码语言:javascript
复制
router.post('/register', function(req, res) {
    Account.register(new Account({
        username: req.body.username,
        name: req.body.name
    }), req.body.password, function(err, account) {
        if (err) {
            console.log(err);
        } else {
            console.log(account);
            passport.authenticate('local', {
                successRedirect: '/',
                failureRedirect: '/login'
            })(req, res, function(err, user) {
                res.redirect('/');
            });
        }
    });
});

同时还包括:

代码语言:javascript
复制
router.post('/login',
    passport.authenticate('local'),
    function(req, res) {
        res.redirect('/');
    }
);

现在,在登录POST请求中,我希望检查是否存在具有该特定用户名的用户,以便如果密码错误,至少我可以告诉用户密码是错误的。用户枚举在这里不是一个安全问题。

在我的代码中,我可以在哪里合并数据库检查,以检查是否存在具有指定用户名的帐户?

EN

回答 1

Stack Overflow用户

发布于 2016-06-15 00:36:30

Account.authenticate()函数中。因为它在您的情况下设置了LocalStrategy。

设置您的本地策略:

代码语言:javascript
复制
passport.use(new LocalStrategy(Account.authenticate()));

示例代码:

代码语言:javascript
复制
function authenticate(username, password, done) {
    User.findOne({ username: username }, function(err, user) {
      if (err) { return done(err); }
      if (!user) {
        return done(null, false, { message: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37814552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档