首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Passport.js信号误码

Passport.js信号误码
EN

Stack Overflow用户
提问于 2015-12-16 14:30:50
回答 2查看 37关注 0票数 0

在尝试使用有效帐户登录时获取以下错误

代码语言:javascript
复制
    if(!user.authenticate(password)){
               ^
TypeError: undefined is not a function
    at Promise.<anonymous> (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/config/strategies/local.js:19:16)
    at Promise.<anonymous> (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8)
    at Promise.emit (events.js:107:17)
    at Promise.emit (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
    at Promise.fulfill (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/node_modules/mpromise/lib/promise.js:97:20)
    at /home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/lib/query.js:1406:13
    at model.Document.init (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/lib/document.js:254:11)
    at completeOne (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/lib/query.js:1404:10)
    at Immediate.cb (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/lib/query.js:1158:11)
    at Immediate._onImmediate (/home/kj/Desktop/nodejs-exp/MEAN_BOOK/node_modules/mongoose/node_modules/mquery/lib/utils.js:137:16)
    at processImmediate [as _immediateCallback] (timers.js:367:17)

下面是我的locals.js,它在身份验证期间被调用

代码语言:javascript
复制
module.exports = function(){
  passport.use(new LocalStrategy(function(username,password,done){
    User.findOne({
      username:username
    },function(err,user){
      if(err){
        return done(err);
      }
      if(!user){
        return done(null,false,{
          message:'Unknown User'
        });
      }
      if(!user.authenticate(password)){
        return done(null,false,{
          message:'Invalid password'
        });
      }

      return done(null,user);
    });
  }));
};

还有我的routes.js文件

代码语言:javascript
复制
module.exports = function(app){
  app.route('/signup')
    .get(users.renderSignup)
    .post(users.signup);

  app.route('/signin')
    .get(users.renderSignin)
    .post(passport.authenticate('local',{
      successRedirect: '/',
      failureRedirect: '/signin',
      failureFlash : true
    }));

  app.get('/signout',users.signout);
};

我的用户模型:

代码语言:javascript
复制
  var UserSchema = new Schema({
    firstName: String,
    lastName : String,
    email: {
      type: String,
      match: [/.+\@.+\..+/, "Please fill a valid e-mail address"]
    },
    username : {
      type: String,
      trim: true,
      required:'Username is required',
      unique : true
    },
    password : {
      type:String,
      validate:[
        function(password){
          return password && password.length>6;
        },'Password should be longer'
      ]
    },
    sale:{
      type:String
    },
    provider:{
      type:String,
      required:'Provider is required'
    },
    providerId:String,
    providerDate:{},
    created : {
      type : Date,
      default : Date.now
    }
  });

我很习惯这个错误意味着什么。如果您需要进一步的信息来调试这个问题,请告诉我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-16 14:51:05

看起来您的模式缺少一个名为实例法authenticate()。这不是自动提供的东西,所以您需要自己实现它。

从您的代码来看,它可能很简单:

代码语言:javascript
复制
UserSchema.methods.authenticate = function(password) {
  return this.password === password;
};
票数 1
EN

Stack Overflow用户

发布于 2015-12-16 14:54:43

你可以简单地:

代码语言:javascript
复制
 if(user.password !== password){
    return done(null,false,{
      message:'Invalid password'
    });
  }

用户模型没有authenticate方法。

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

https://stackoverflow.com/questions/34314646

复制
相关文章

相似问题

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