2016-06-11 8 views
2

私が登録するアプリケーションとログインを行いますが、何かが、これは、ルータ/ users.jsconsole.logとnode.jsのリダイレクトは機能しませんか?

var express = require('express'); 
var router = express.Router(); 
var passport = require('passport'); 
var LocalStrategy = require('passport-local').Strategy; 
var multer = require('multer'); 
var upload = multer({dest: './uploads'}); 

var User = require('../models/user'); 

/* GET users listing. */ 
router.get('/', function(req, res, next) { 
    res.send('respond with a resource'); 
}); 

router.get('/register', function(req, res, next) { 
    res.render('register', { 
    'title': 'Register' 
    }); 
}); 

router.get('/login', function(req, res, next) { 
    res.render('login', { 
    'title': 'Login' 
    }); 
}); 

router.post('/register', upload.single('profileimage'), function(req, res, next){ 
    //get form values 
    var name = req.body.name; 
    var email = req.body.email; 
    var username = req.body.username; 
    var password = req.body.password; 
    var password2 = req.body.password2; 

//check for image field 
    if(req.files && req.files.profileimage){ 
    console.log('Uploading File...'); 
    //var profileimage = req.file.filename; 

    //file info 
    var profileImageOriginalName = req.files.profileimage.originalname; 

    var profileImageName   = req.files.profileimage.name; 
    var profileImageMime   = req.files.profileimage.mimetype; 
    var profileImagePath   = req.files.profileimage.path; 
    var profileImageExt   = req.files.profileimage.extension; 
    var profileImageSize   = req.files.profileimage.size; 
    } else { 
    //set a default image 
    var profileImageName = 'noimage.png'; 
    } 

//form validation 
    req.checkBody('name','Name field is required').notEmpty(); 
    req.checkBody('email','Email field is required').notEmpty(); 
    req.checkBody('email','Email not valid').isEmail(); 
    req.checkBody('username','Username field is required').notEmpty(); 
    req.checkBody('password','Password field is required').notEmpty(); 
    req.checkBody('password2','Passwords do not match').equals(req.body.password); 

    //check for errors 
    var errors = req.validationErrors(); 

    if(errors){ 
    res.render('register', { 
     errors: errors, 
     name: name, 
     email: email, 
     username: username, 
     password: password, 
     password2: password2 
    }); 
    } else { 
    var newUser = new User({ 
     name: name, 
     email: email, 
     username: username, 
     password: password, 
     profileimage: profileImageName 
    }); 

    //create user 
    User.createUser(newUser, function(err, user){ 
     if(err) throw err; 
     console.log(user); 
    }); 

    //success message 
    req.flash('success', 'You are now registered and may log in'); 

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

}); 

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

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

passport.use(new LocalStrategy(
    function(username, password, done){ 
    User.getUserByUsername(username, function(err, user){ 
     if(err) throw err; 
     if(!user){ 
     console.log('Unknown User'); 
     return done(null, false, {message: 'Unknown User'}); 
     } 
    User.comparePassword(password, user.password, function(err, isMatch){ 
     if(err) throw err; 
     if(isMatch){ 
     return done(null, user); 
     } else { 
     console.log('Invalid Password'); 
     return done(null, false, {message: 'Invalid Password'}); 
     } 
    }); 
    }); 
} 
)); 

router.post('/login', passport.authenticate('local',{failureRedirect: '/users/login', failureFlash: 'Invalid username or password'}), function(req, res){ 
    console.log('Authentication Successful'); 
    req.flash('success', 'You are logged in'); 
    res.redirect('/'); 
}); 

module.exports = router; 

からusers.jsであり、これはモデル/ user.jsのからuser.jsのある適切

が動作していません

var mongoose = require('mongoose'); 
var bcrypt = require('bcrypt'); 

mongoose.connect('mongodb://localhost/nodeauth'); 
var db = mongoose.connection; 

//user schema 
var UserSchema = mongoose.Schema({ 
    username: { 
    type: String, 
    index:true 
    }, 
    password: { 
    type: String, 
    required: true, 
    bcrypt: true 
    }, 
    email: { 
    type: String 
    }, 
    name: { 
    type: String 
    }, 
    profileimage: { 
    type: String 
    } 
}); 

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

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

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

module.exports.getUserByUsername = function(username, callback){ 
    var query = {username: username}; 
    User.findOne(query, callback); 
} 

module.exports.createUser = function(newUser, callback){ 
    bcrypt.hash(newUser.password, 10, function(err, hash){ 
    if(err) throw err; 
    //set hashed pw 
    newUser.password = hash; 
    //create user 
    newUser.save(callback); 
    }); 
} 

登録を使用すると、ログインを使用しても機能しません。具体的には、私が正しいかどうかにかかわらず、cmdで私を表示しないと、リダイレクト機能は動作しません。

comand prompt

+0

私はサーバスクリプトだと思いますが、ブラウザはそれをキャプチャできません。cmdコンソールでチェックしてください:) – HoangHieu

+0

私は、ログをとったときに私が表示するものを知っています。 – sanja

答えて

0

[OK]を、私はpassportドキュメントに簡単に見ていたし、自分の認証が失敗し、あなたがpassport.authenticate方法のfailureRedirect小道具で指定されたURLにリダイレクトされますように見えます。認証が失敗した場合、パスポート401 Unauthorized状態で応答し、任意の追加のルートハンドラが呼び出されないように動作しますpassport.authenticateデフォルトで

、。メソッドにいくつかのオプション、特にリダイレクトするURLを指定したので、パスポートは、401 Unauthorizedの代わりにリダイレクトを行います。これは、コマンドプロンプトの提供された画面に表示されます。最初にPOST /users/login302 Foundという応答があります。その後、GET /users/loginにリダイレクトされます。

とにかく、認証に失敗した場合に追加のコールバックが呼び出されないという事実に注意してください。

認証されていないため、おそらくconsole.logres.redirect('/');には届かない可能性があります。

+0

はい、しかし、今私たちは、私が正しいかどうかにかかわらず、いつも '認証成功'を表示します... – sanja

+0

これを解決するには? – sanja

関連する問題