首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bookshelf.js不使用护照

bookshelf.js不使用护照
EN

Stack Overflow用户
提问于 2017-02-28 11:13:57
回答 1查看 606关注 0票数 1

我有一个简单的‘.’‘.’‘我尝试了我在网上找到的所有解决方案。请帮帮忙。

config/passport.js

代码语言:javascript
复制
...
    passport.use('local-login', new LocalStrategy({
            passReqToCallback : true
        },
        function(req, username, password, done) {
            User.where({username: username}).fetch().then(function(err, user) {
                if (err)  return done(err);
                if (!user) {
                    return done(null, false, req.flash('loginMessage', 'Cant find user!'));
                }
                user = user.toJSON();
                if(User.validPassword(password, user.password)){
                    return done(null, false, req.flash('loginMessage', 'Invalid pass!'));
                }
                return done(null, user);
            }).catch(function(err) {
                console.error(err);
            });
        }
    ));
...

路线/创作.

代码语言:javascript
复制
...
router.post('/login', passport.authenticate('local-login', {
    successRedirect: '/users/profile',
    failureRedirect: '/auth/login',
    failureFlash: true
}));
...

server.js

代码语言:javascript
复制
const express       = require('express');
const session       = require('express-session');
const passport      = require('passport');
const flash         = require('connect-flash');
const path          = require('path');
const favicon       = require('serve-favicon');
const logger        = require('morgan');
const cookieParser  = require('cookie-parser');
const bodyParser    = require('body-parser');

const config        = require('./config/app.js');

const index         = require('./routes/index');
const auth          = require('./routes/auth');
const users         = require('./routes/users');

require('./config/passport.js')(passport);

const app = express();

app.set('env', config.website.env);

app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')))
app.use(session({
    secret: config.security.salt,
    resave: true,
    saveUninitialized: true
}));
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());

app.use('/', index);
app.use('/auth', auth);
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-28 13:03:08

我认为这里的主要问题是then()的使用。它不使用err参数作为传统回调。

另一个小问题是,catch()应该将错误转发到护照,而不是仅仅记录它。

所以试着把它改为

代码语言:javascript
复制
passport.use('local-login', new LocalStrategy({
    passReqToCallback : true
  },
  function(req, username, password, done) {
    new User({username: username})
      .fetch()
      .then(function(user) {
         if (!user) {
           return done(null, false,
             req.flash('loginMessage', 'Cant find user!'));
         }
         user = user.toJSON();
         if (User.validPassword(password, user.password)) {
           return done(null, false,
             req.flash('loginMessage', 'Invalid pass!'));
         }
         return done(null, user);
      })
      .catch(function(err) {
         return done(err);
      });
    }
  ));

顺便提一句,我被User.validPassword()弄糊涂了。它是否返回无效密码的值?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42507243

复制
相关文章

相似问题

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