PassportJs本地策略在快递申请中的位置?

Sag*_*sai 1 model-view-controller node.js express passport.js

我有一个expressjs应用程序,我正在尝试设置passportjs进行简单的用户身份验证.我的路线存储在单独的文件中.我有一个路由文件(users.js)用于我所有与用户相关的路由.我还有一个名为UserController的控制器文件,其中包含用户相关内容的所有功能并处理我的数据库.

我的问题是,我应该在哪里宣布护照策略,使其遵循MVC模式?

将它放在除路由文件之外的任何其他文件中都不起作用,因为它没有护照对象.

Eva*_*van 6

我将护照文件放在配置文件夹中.以下是passport.js文件的示例.这是针对本地登录策略的.

module.exports = function(passport) {

    passport.serializeUser(function(user, done) {
      done(null, user.id);
    }); // if you are using sessions

    passport.deserializeUser(function(id, done) {
      User.findById(id, function(err, user) {
        done(err, user);
      });
    }); // if you are using sessions

    passport.use('local-login', new LocalStrategy({
      usernameField : 'email',
      passwordField : 'password',
      passReqToCallback : true
   },
   function(req, email, password, done) {
     // mongodb example - you have to query for user, 
     // check password, and return user if successful
     User.findOne({ 'local.email' : email },
     function(err, user) {
       if (err) return done(err);

       if (!user) return done(null, false);

       if (!user.validPassword(password) {
         return done(null, false);
       }

       else
         return done(null, user); // all good return user
     });
   });
};
Run Code Online (Sandbox Code Playgroud)

然后在app.js我做:

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


app.use(passport.initialize())

var usersRoutes = require('./server/routes/usersRoutes')(app, express, passport);
app.use('/users', usersRoutes);
Run Code Online (Sandbox Code Playgroud)

然后在你的路线文件中:

module.exports = function(app, express, passport) {
  var usersRouter = express.Router();

  return usersRouter;

};
Run Code Online (Sandbox Code Playgroud)

现在您的护照功能在您的路线中可用.我会搜索"easy-node-authentication"以获取网络上的好例子.