Passport.js Execution

Passport.js Execution

本文关键字:Execution js Passport      更新时间:2023-09-26

我一直在网上看一些passport.js教程,但还没有清楚地了解发生了什么。有人能帮我澄清下面的疑虑吗请先阅读底部的段落

因此,假设我正确设置了所有内容,这就是登录策略:

passport.use('login', new LocalStrategy({
    passReqToCallback : true
  },
  function(req, username, password, done) { 
    // check in mongo if a user with username exists or not
    User.findOne({ 'username' :  username }, 
      function(err, user) {
        // In case of any error, return using the done method
        if (err)
          return done(err);
        // Username does not exist, log error & redirect back
        if (!user){
          console.log('User Not Found with username '+username);
          return done(null, false, 
                req.flash('message', 'User Not found.'));                 
        }
        // User exists but wrong password, log the error 
        if (!isValidPassword(user, password)){
          console.log('Invalid Password');
          return done(null, false, 
              req.flash('message', 'Invalid Password'));
        }
        // User and password both match, return user from 
        // done method which will be treated like success
        return done(null, user);
      }
    );
}));

现在,在我的app.js(服务器)中,我有一条路线:

/* Handle Login POST */
  router.post('/login', passport.authenticate('login', {
    successRedirect: '/home',
    failureRedirect: '/',
    failureFlash : true 
  }));

现在在我的AJS文件中:

app.controller('loginController', function($scope) {
    var user = $resource('/login');
    $scope.createUser = function() {
        var User = new user();
        User.username = $scope.usernameVar;
        User.password = $scope.passwordVar;
        User.save();
    }
});

请先阅读(而不是先阅读代码):

因此,当用户单击登录页面上的登录按钮时,上面的createUser函数就会运行(在我的AJS文件中)。然后,我为端点'/login'创建一个资源对象,当我在上面调用save时,它将在我的服务器(app.js)上运行该'/login'端点的路由。然后,在我的server中,它将运行passport中间件的passport.authenticate('login', ...

现在我的问题是:

passport.use('login'...策略中,变量req, username, and password的do值来自该策略的回调。我必须明确地传递用户在我前端的文本字段中输入的用户名和密码吗。就像我在AJS视图中为这两个文本字段提供了双向数据绑定一样。如果是,我该如何传递这些用户名和密码值?

AJS控制器User.username = $scope.usernameVar;User.password = $scope.passwordVar;中的这两行是否将usernameVar和passwordVar值附加到服务器上req对象的路由'/login'

如果您有一个带有操作的表单要发布到您的路径/login,并且输入名称标记在usernamepassword之后,则提交按钮会将值传递到您的护照代码中。

请查看文档中的表单