【问题标题】:Passport local authentication is not working护照本地身份验证不起作用
【发布时间】:2016-10-29 00:31:39
【问题描述】:

我正在使用 MEAN STACK 构建应用程序。我想为我的登录表单使用本地护照身份验证。但是在提交表单的时候,我收到了 POST http://localhost/login 404 (Not Found) 请查看下面的代码 这是我的控制器:

lyfee.controller('loginCtrl', ['$scope', '$http', function($scope, $http) {
    $scope.user = {};
    $scope.login = function() {
        //  var data = {User: $scope.user }
        //console.log($scope.user);
        console.log("login function call");
        $http.post('/login', $scope.user);
        console.log("login request send");


    }
}]);

这是我的 server.js :

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy(
    function(username, password, done) {
        User.getUserByusername(username, function(err, user) {

            if (err) throw err;
            if (!user) {
                return done(null, false, {
                    message: 'Unknown USER'
                });

            }

            User.comparePassword(password, user.password, function(err, isMatch) {
                if () throw err;
                if (isMatch) {
                    return done(null, user);
                } else {
                    return done(null, false, {
                        message: 'Invalid password'
                    });
                }
            });
        });

    }));

app.post('/login',
    passport.authenticate('local', {
        successRedirect: '/',
        failureRedirect: '/login',
        failureFlash: true
    }),
    function(req, res) {
        res.redirect('/');

    });

我应该在哪个文件中编写 getUserByusername 和 comparePassword 函数?我在做什么错了,请纠正它并给我一些建议。

【问题讨论】:

  • getUserByusername 和 comparePassword 可以写在模型文件中,例如。用户.js
  • @Md.SharifulIslam,我在模型中有 dbSchema.js,我为 mongoose 定义了模式,所以我可以在那里写代码吗?
  • MEAN Stack, SPA - 只有一页。没有重定向的地方。只需返回 HTTP 状态(200、401)并在前端支持它。

标签: node.js passport.js mean-stack passport-local mean.io


【解决方案1】:

在您的模型中假设 User.js 编写如下函数:

/**
 * Check the user's password
 */
dbSchema.methods.comparePassword = function(candidatePassword, cb) {
    var status = this.password.localeCompare(candidatePassword.trim());
    if (status != 0) {
        return cb(err); 
    }
    cb(null, true);
};

然后像这样使用函数

passport.use(new LocalStrategy(
  function(username, password, done) {
    User.findOne({
      username: username
    }, function(err, user) {
      if (err) throw err;
      if (!user) {
        return done(null, false, {
          message: 'Unknown USER'
        });

      }
      /**
      * Check the user's password
      */
      User.comparePassword(password, user.password, function(err, isMatch) {
        if (err) throw err;
        if (isMatch) {
          return done(null, user);
        } else {
          return done(null, false, {
            message: 'Invalid password'
          });
        }
      });
    });
}));

【讨论】:

  • 我没有插入加密密码,所以“检查用户密码”功能需要更改代码吗?
  • 你输入的是普通密码吗?
  • 使用您对密码进行哈希处理的相同方法并比较密码
猜你喜欢
  • 2015-08-21
  • 2017-02-02
  • 2013-06-25
  • 2014-03-17
  • 2016-10-19
  • 2017-03-06
  • 2013-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多