2017-07-12 4 views
-1

私は質問を編集します。誰かがこのコードを修正して私を助けてくれますか?私はパスポートを使ってログインシステムの作成についてユーチューブでガイドを休耕していますnode.jsのパスポート

は、私は彼女が呼び出されたときに機能

passport.use(new LocalStrategy(

についてはこちらを理解しない、そしてそれは、引数のログイン、パスワードを取得する場所から。

ユーザ・モデル

var mongoose = require('mongoose'); 
    var Schema = mongoose.Schema; 


    var UserSchema = new Schema({ 
     login: { type: String, maxlength: 20, required: false }, 
     password: { type: String, maxlength: 202, required: false }, 
     updated: { type: Date, default: Date.now }, 
     created: { type: Date, default: Date.now } 

    }); 

    module.exports = mongoose.model('User', UserSchema); 

    module.exports.comparePassword = function(candidatePassword, hash, callback){ 
     bcrypt.compare(candidatePassword, hash, function(err, isMatch) { 
      if(err) throw err; 
      callback(null, isMatch); 
     }); 
    } 

    module.exports.getUserById = function(id, callback){ 
     User.findById(id, callback); 
    } 

ユーザーモデル

var express = require('express'); 
var MongoClient = require('mongodb').MongoClient; 
var router = express.Router(); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var Product = require('../../model/product.model'); 
var Category = require('../../model/category.model'); 
var mongoose = require('mongoose'); 
var User = require('../../model/user.model'); 
var _ = require('lodash'); 

var bcrypt = require('bcrypt'); 
const saltRounds = 10; 




router.post('/create', function (req, res, next) { 

    var newUser = { 
    login: req.body.login, 
    password: req.body.password 
    } 
    console.log(req.body) 

    req.checkBody('login', 'Login is required').notEmpty(); 
    req.checkBody('password', 'Password is required').notEmpty(); 

    var errors = req.validationErrors(); 

    if (errors) { 
    console.log(errors) 
    res.send(errors); 
    } else { 
    bcrypt.hash(newUser.password, saltRounds, function (err, hash) { 
     if (err) { 
     console.log(err) 
     } else { 
     newUser.password = hash; 
     var user = new User(newUser); 
     user.save() 
      .then(function (User) { 
      res.send(User); 
      }) 
     } 
    }); 
    req.flash('success_msg', 'You are registered and can now login'); 

    //res.redirect('/'); 
    } 
}); 

passport.use(new LocalStrategy(
    function(login, password, done) { 
    User.findOne({ login: login }, function(err, user){ 
    if(err) { 
     console.log(err); 
    } 
    if(!user) { 
     return done(null, false, { 
     message: 'Unkown User' 
     }) 
    } 
    }); 


    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'}); 
     } 
    }); 
    })); 

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

passport.deserializeUser(function(id, done) { 
    User.getUserById(id, function(err, user) { 
    done(err, user); 
    }); 
}); 


router.post('/login', function (req, res, next) { 
    console.log(req.body) 
    passport.authenticate('local', { successRedirect: '/', failureRedirect: '/', failureFlash: true }), 
    function (req, res) { 
     res.redirect('/product/list') 
    } 
}) 



module.exports = router; 
+1

特に[docs](http://passportjs.org/docs)で理解できないことがある場合は、そのことを明示する必要があります。私たちは推測をしません。 –

+0

私は主な利用状況を理解できませんが、私はPassportを使ってログインシステムをしようとしていますが、彼が何をしているのか分かりません。 – Turqus

+0

また、私たちは本当にそれを行うことができないので、あなたのニーズに合った幅広い仕立てた説明を作成しません。あなたのコメントでも、あなたが取り組んでいることややろうとしていることについての詳細は追加されていません。 「PassportがNode.js用の認証ミドルウェア」という部分を理解していない場合でも、ここでの質問以上のものが必要になります。さらなる学習と研究を行うこと、または他のウェブサイトで助けを求めることを検討してください。 –

答えて

0

彼女が呼ばれていますか?あなたは'/login'でPOSTリクエストを取得しながら、それはあなたのプロジェクトでpassport.authenticate('local'.. を呼び出すとき

passport.use(new LocalStrategy(が使用されます。

LocalStrategyはリクエストを認証する戦略を提供します。あなたは別の戦略を選ぶことができます。戦略とその構成は、use()関数を介して提供されます。詳細:Passport Documentation

ここで、引数のログイン、パスワードはどこから得られますか?

デフォルトでは、LocalStrategyは、usernameとpasswordという名前のパラメータでクレデンシャルを見つけることを想定しています。あなたのサイトがこれらのフィールドに異なる名前を付けたい場合は、デフォルトを変更するオプションが利用できます。 からLocalStrategy Documentataion

関連する問題