Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
57 views
in Technique[技术] by (71.8m points)

javascript - TypeError: Cannot read property 'signinSuccess' of undefined

Im developing a website using Cloud9, trying to create a login using passport connecting to a MySQL database but when testing in postman i get the error shown in the print The error occurs in this line of code: res.status(jsonMessages.users.signinSuccess.status).send(req.users); I cant apply the method signinSuccess to the users because it is undefined Any help would be appreciated

 //PASSPORT
            //load bcrypt
              var bCrypt = require('bcrypt-nodejs');
              //var passport = require("passport");
              module.exports = function(passport,users){
            
              let User = users;
              let LocalStrategy = require('passport-local').Strategy;
            
            
              passport.serializeUser(function(users, done) {
                      done(null, users.id);
                  });
            
            
              passport.deserializeUser(function(id, done) {
                  User.findByPk(id).then(function(users) {
                    if(users){
                      done(null, users.get());
                    }
                    else{
                      done(users.errors,null);
                    }
                  });
            
              });
            
            
              passport.use('local-signup', new LocalStrategy(
            
                {           
                  usernameField : 'email',
                  passwordField : 'password',
                  passReqToCallback : true // allows us to pass back the entire request to the callback
                },
            
                function(req, email, password, done){
                  const user_typeField = req.body.user_type;
                  const addressField = req.body.address;
                  const Citizen_id_citizenField = req.body.Citizen_id_citizen;
                  const phoneField = req.body.phone;
                  const photoField = req.body.photo;
                  const Speciality_id_specialityField = req.body.Speciality_id_speciality;
                  const User_team_id_user_teamField = req.body.User_team_id_user_team;
                  const nameField = req.body.name;
            
                  let generateHash = function(password) {
                  return bCrypt.hashSync(password, bCrypt.genSaltSync(8), null);
                  };
            
                   User.findOne({where: {email:email}}).then(function(user){
            
                  if(users)
                  {
                    return done(null, false, {message : 'That email is already taken'} );
                  }
            
                  else
                  {
                    let userPassword = generateHash(password);
                    let data =
                    { email:email,
                    password:userPassword,
                    user_type:user_typeField,
                    address:addressField,
                    Citizen_id_citizen:Citizen_id_citizenField,
                    phone:phoneField,
                    photo:photoField,
                    Speciality_id_speciality:Speciality_id_specialityField,
                    User_team_id_user_team:User_team_id_user_teamField,
                    name:nameField
                   
                    
                    };
            
            
                    User.create(data).then(function(newUser,created){
                      if(!newUser){
                        return done(null,false);
                      }
            
                      if(newUser){
                        return done(null,newUser);
                        
                      }
            
            
                    });
                  }
            
            
                }); 
            
            
            
              }
            
            
            
              ));
                
               //LOCAL SIGNIN
              passport.use('local-signin', new LocalStrategy(
                
              {
            
              // by default, local strategy uses username and password, we will override with email
              usernameField : 'email',
              passwordField : 'password',
              passReqToCallback : true // allows us to pass back the entire request to the callback
              },
            
              function(req, email, password, done) {
            
                let User = users;
            
                let isValidPassword = function(userpass,password){
                  return bCrypt.compareSync(password, userpass);
                }
            
                User.findOne({ where : { email: email}}).then(function (users) {
            
                  if (!users) {
                    return done(null, false, { message: 'Email does not exist' });
                  }
            
                  if (!isValidPassword(users.password,password)) {
            
                    return done(null, false, { message: 'Incorrect password.' });
            
                  }
            
                  let userinfo = users.get();
                  
                  return done(null,userinfo);
            
                }).catch(function(err){
            
                  console.log("Error:",err);
            
                  return done(null, false, { message: 'Something went wrong with your Signin' });
            
            
                });
            
              }
              ));
            
              }
            
    //auth.controller.js
    
    const jsonMessagesPath = __dirname + "/../assets/jsonMessages/";
    const jsonMessages = require(jsonMessagesPath + "login");
    
    var exports = module.exports = {};
    exports.signup = function(req, res) {
        res.status(jsonMessages.users.duplicate.status).send(jsonMessages.users.duplicate);
    };
    exports.signupSuccess = function(req, res) {
        res.status(jsonMessages.users.signupSuccess.status).send(jsonMessages.users.signupSuccess);
    };
    exports.signin = function(req, res) {
        res.status(jsonMessages.users.invalid.status).send(jsonMessages.users.invalid);
        console.log(res.user);
    };
    exports.signinSuccess = function(req, res) {
        console.log(req.user);
        res.status(jsonMessages.users.signinSuccess.status).send(req.users);
    };
    exports.logout = function(req, res, err) {
        req.session.destroy(function(err) {
            if (err) {
                console.log(err);
                res.status(jsonMessages.user.logoutError.status).send(jsonMessages.user.logoutError);
            }
            res.status(jsonMessages.user.logoutSuccess.status).send(jsonMessages.user.logoutSuccess); 
        });
    };

[The link below is the printscreen of the error ][1]


  [1]: https://i.stack.imgur.com/hHtOU.png
question from:https://stackoverflow.com/questions/65879644/typeerror-cannot-read-property-39signinsuccess39-of-undefined

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...