Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript nodejs护照登录_Javascript_Node.js_Login_Passport.js - Fatal编程技术网

Javascript nodejs护照登录

Javascript nodejs护照登录,javascript,node.js,login,passport.js,Javascript,Node.js,Login,Passport.js,我使用mongoose在nodejs上设置passport,允许用户登录并创建新帐户。创建新帐户正在工作,但登录部分不工作 users.js var passport = require('passport'); var LocalStrategy = require('passport-local').Strategy; var mongoose = require('mongoose'); var User = require('../models/user'); router.get('

我使用mongoose在nodejs上设置passport,允许用户登录并创建新帐户。创建新帐户正在工作,但登录部分不工作

users.js

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var mongoose = require('mongoose');
var User = require('../models/user');

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

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

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', {successRedirect: '/',failureRedirect: '/users/register', failureFlash:'Invalid username or password'}), function(req,res){
    console.log('Authentication Successful');
    req.flash('success', 'You are logged in');
    res.redirect('/');
});
var mongoose = require('mongoose');
var bcrypt = require('bcrypt');
mongoose.connect('mongodb://localhost/nodeauth');
var db = mongoose.connection;
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);
     });
 }
。/models/user.js

var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var mongoose = require('mongoose');
var User = require('../models/user');

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

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

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', {successRedirect: '/',failureRedirect: '/users/register', failureFlash:'Invalid username or password'}), function(req,res){
    console.log('Authentication Successful');
    req.flash('success', 'You are logged in');
    res.redirect('/');
});
var mongoose = require('mongoose');
var bcrypt = require('bcrypt');
mongoose.connect('mongodb://localhost/nodeauth');
var db = mongoose.connection;
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);
     });
 }

如果我创建的新用户正在工作,那么数据将上载MongoDB,但是如果我尝试登录它,请将我放到/users/register页面,我没有任何错误,因为您的登录路径没有调用任何东西,所以它没有做任何事。。。查看上的文档以了解passport的工作原理

在user.js中,您需要

router.get('/login',
  passport.authenticate('local'),
  function(req, res) {
    res.render('login', {
    'title': 'Login'
    });
  });
然后在单独的文件中,您需要设置身份验证策略,例如:

var passport = require('passport')
  , LocalStrategy = require('passport-local').Strategy;

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: 'Incorrect username.' });
      }
      if (!user.validPassword(password)) {
        return done(null, false, { message: 'Incorrect password.' });
      }
      return done(null, user);
    });
  }
));
查看本教程,了解有关实现本地身份验证策略的逐步步骤。

如果你想要更高级的东西,这段代码有一些社会认证策略的例子(例如,你的用户可以使用Facebook帐户登录)


祝你好运

无关:配置文件图像如何成为字符串?