0

Goodmorning私の恋人、私はnodejsと狂っている。私はPassport-LocalとSequelizeライブラリを使用して、NodeJSによって強化された簡単なユーザー管理Webアプリケーションのバックエンドを実現しようとしています。今私はちょうどユーザーモデルを設計しました。私が持っている主な問題は、サインアッププロセスが私にエラーを与えることです:私は未定義のオブジェクトに取り組んでいるように見えます。誰かが何が起こっているのか把握するのを助けてくれますか?NodeJSはパスポートが好きではない+ログインを続ける

は、ここに私のコードです(私はインターネット上で見つかったいくつかのソリューションと合併 - 明らかに何もマーフィーの法則によると、働きません)。

Javascriptのプログラマーは、コードが文字通り吸うと私に許してもらえますか?私の言い訳は、それがJavascriptでの私の最初のプログラミングの試行であることです。私はプロジェクトと最後に(言い訳)しなければなりませんが、Cとマイクロチップで育ったことは間違いありません。

ERROR:

TypeError: Cannot read property 'findOne' of undefined 
    at Strategy._verify (/home/me/Documents/cerbero/config/passport.js:21:17) 

app.js

var app = express(); 


//blabla favicon stuff 

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 


app.use(session({ secret:'holaholaholaholaholaholahola', 
        resave:true, 
        saveUninitialized:true 
       })); 



app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(flash()); 

app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'pug'); 

var models = require("./models") 
require('./config/passport.js')(passport, models.usermodel); 

app.use('/', index); 
app.use('/user', require('./routes/users')(passport)); 


models.sequelize.sync().then(function(){ 
    console.log("Database connected"); 
}).catch(function(err) { 
    console.log(err, "Somenthing went wrong with the dbdbdb"); 
}); 

//blabla listening stuff 



module.exports = app; 

モデル/ usermodel.js

module.exports = function(sequelize, Sequelize) { 
    var User = sequelize.define('user', { 

     id: { 
      autoIncrement: true, 
      primaryKey: true, 
      type: Sequelize.INTEGER 
     }, 

     username: { 
      type: Sequelize.TEXT 
     }, 

     public_key: { 
      type: Sequelize.TEXT 
     }, 

     email: { 
      type: Sequelize.STRING, 
      validate: { 
       isEmail: true 
      } 
     }, 

     password: { 
      type: Sequelize.STRING, 
      allowNull: false 
     }, 

     last_login: { 
      type: Sequelize.DATE 
     }, 

    }); 

    return User; 
} 

ルート/ users.js

var express = require('express'); 

module.exports = function(passport, user) { 
    var router = express.Router(); 

    //blablabla other routes 
    router.get('/signup', function(req,res,next) { 
    res.render('signup', {message: req.flash('signupMessage')}); 
    }); 


    router.post('/signup', passport.authenticate('local-signup', { 
    successRedirect: '/user/dashboard', 
    failureRedirect: '/user/signup'} 
)); 

    router.post('/login', passport.authenticate('local'), function(req, res) { 
    res.redirect('/'); 
    }); 



    return router; 
}; 

function isLogged(req, res, next) { 
    if (req.isAuthenticated()) 
    return next(); 

    res.redirect('/'); 
}; 

EDIT パスポート戦略を忘れました。 passport.js

var bCrypt = require('bcrypt-nodejs'); 


module.exports = function(passport, user) { 

    var User = user; 
    var LocalStrategy = require('passport-local').Strategy; 
    console.log('debug: sono nella routine'); 


    passport.use('local-signup', new LocalStrategy(

     { 
      usernameField: 'email', 
      passwordField: 'password', 
      passReqToCallback: true 
     }, 
     function(req, email, password, done) { 


      User.findOne({ 
       where: { 
        email: email 
       } 
      }).then(function(user) { 
       if (user) { 
        return done(null, false, {message: req.flash('email already taken')}); 
        console.log('mail already taken'); 
       } 
       else { 
        var pass = generateHash(password); 

        var data = 

         { 
          email: email, 
          password: pass, 
          username: req.body.username, 
          public_key: '0', 
          last_login: null 

         }; 

        User.create(data).then(function(newUser, created) { 

         if (!newUser) { 

          return done(null, false); 

         } 

         if (newUser) { 

          return done(null, newUser, {message: req.flash('tappost')}); 

         } 

         next(); 

        }); 

       } 

      }); 

     } 

    )); 

    passport.deserializeUser(function(id, done) { 

     User.findById(id).then(function(user) { 

      if (user) { 

       done(null, user.get()); 

      } else { 

       done(user.errors, null); 

      } 

     }); 

    }); 


    passport.serializeUser(function(user,done) { 
     done(null, user.id); 
    }); 

var generateHash = function(password) { 
       return bCrypt.hashSync(password, bCrypt.genSaltSync(8), null); 
       }; 
+0

エラーから提示された決定的なパスポートストラテジファイルのように書き換えていたpassport.jsでモデルを参照する方法を変更しますあなたのpassport.jsファイルですが、それはあなたが私たちがレビューするために含めなかった1つのファイルです! – genestd

+0

あなたはそうです。私はその質問を編集した。これでコードが見つかります。 – giudaballerino

答えて

0

問題が解決しました。 は「ジャスト」

var User = user; 

に従うようにここで

var User = db.user; 

const db = require('./../models/'); 
var bCrypt = require('bcrypt-nodejs'); 


module.exports = function(passport) { 

    var User = db.user; 
    var LocalStrategy = require('passport-local').Strategy; 

    passport.use('local-signup', new LocalStrategy(

     { 
      usernameField: 'email', 
      passwordField: 'password', 
      passReqToCallback: true 
     }, 
     function(req, email, password, done) { 
      var generateHash = function(password) { 
      return bCrypt.hashSync(password, bCrypt.genSaltSync(8), null); 
      }; 

      User.findOne({ 
       where: { 
        email: email 
       } 
      }).then(function(user) { 
       if (user) { 
        return done(null, false, {message: req.flash('email already taken')}); 
        console.log('mail already taken'); 
       } 
       else { 
        var pass = generateHash(password); 

        var data = 

         { 
          email: email, 
          password: pass, 
          username: req.body.username, 
          public_key: '0', 
          last_login: null 

         }; 

        User.create(data).then(function(newUser, created) { 

         if (!newUser) { 

          return done(null, false); 

         } 

         if (newUser) { 

          return done(null, newUser, {message: req.flash('tappost')}); 

         } 

        }); 

       } 

      }).catch(function(err) { 
       console.log(err); 
      }); 

     } 

    )); 


    passport.serializeUser(function(user, done) { 
      done(null, user.id); 
     }); 

     passport.deserializeUser(function(id, done) { 
      User.findById(id).then(function(user){ 
       done(null, user); 
      }).catch(function(e){ 
       done(e, false); 
      }); 
     }); 




} 
+0

こんにちは、私はpassportJSのログインとサインアップ機能をしたいと思いますあなたは私に同じチュートリアルやブログを共有することはできますか? – Kannan

関連する問題