2017-03-27 6 views
0

私はMEANスタックを使用してAPIを構築しており、ログインとサインアップの機能に取り組んでいます。それ以外の場合は1ログインに成功し、0:MEANスタックアプリケーションでのユーザー認証

{ 
success: 0, 
message: "" 
} 

成功を次のように

は、と私はJSON文字列で応答します。

var mongoose = require('mongoose'); 
var User = mongoose.model('User'); 
var LocalStrategy = require('passport-local').Strategy; 
var bCrypt = require('bcrypt-nodejs'); 

module.exports = function(passport){ 

// Passport needs to be able to serialize and deserialize users to support persistent login sessions 
passport.serializeUser(function(user, done) { 
    console.log('serializing user:',user.username); 
    done(null, user._id); 
}); 

passport.deserializeUser(function(id, done) { 
    User.findById(id, function(err, user) { 
     console.log('deserializing user:',user.username); 
     done(err, user); 
    }); 
}); 

passport.use('login', new LocalStrategy({ 
     passReqToCallback : true 
    }, 
    function(req, username, password, done) { 
     // check in mongo if a user with username exists or not 
     User.findOne({ 'username' : username }, 
      function(err, user) { 
       // In case of any error, return using the done method 
       if (err) 
        return done(err); 
       // Username does not exist, log the error and redirect back 
       if (!user){ 
        console.log('User Not Found with username '+username); 
        return done(null, false);     
       } 
       // User exists but wrong password, log the error 
       if (!isValidPassword(user, password)){ 
        console.log('Invalid Password'); 
        return done(null, false); // redirect back to login page 
       } 
       // User and password both match, return user from done method 
       // which will be treated like success 
       return done(null, user); 
      } 
     ); 
    } 
)); 

passport.use('signup', new LocalStrategy({ 
     passReqToCallback : true // allows us to pass back the entire request to the callback 
    }, 
    function(req, username, password, done) { 

     // find a user in mongo with provided username 
     User.findOne({ 'username' : username }, function(err, user) { 
      // In case of any error, return using the done method 
      if (err){ 
       console.log('Error in SignUp: '+err); 
       return done(err); 
      } 
      // already exists 
      if (user) { 
       console.log('User already exists with username: '+username); 
       return done(null, false); 
      } else { 
       // if there is no user, create the user 
       var newUser = new User(); 

       // set the user's local credentials 
       newUser.username = username; 
       newUser.password = createHash(password); 

       // save the user 
       newUser.save(function(err) { 
        if (err){ 
         console.log('Error in Saving user: '+err); 
         throw err; 
        } 
        console.log(newUser.username + ' Registration succesful');  
        return done(null, newUser); 
       }); 
      } 
     }); 
    }) 
); 

var isValidPassword = function(user, password){ 
    return bCrypt.compareSync(password, user.password); 
}; 
// Generates hash using bCrypt 
var createHash = function(password){ 
    return bCrypt.hashSync(password, bCrypt.genSaltSync(10), null); 
}; 

}; 

は使用に応じて

+0

巨大なチップがありますか?シンプルな認証のためには、パスポートを使用しないでください。 'jwt-simple'のようなものを見て、認証がどうなっているのか理解してください。 – Pytth

答えて

0

をJSON文字列を渡すことで私を助けてください、次のように

module.exports = function(passport){ 

//log in 
router.post('/login', passport.authenticate('login', { 
    //success 
    //failure 
})); 

//sign up 
router.post('/signup', passport.authenticate('signup', { 
    //success 
    //failure 
})); 

//log out 
router.get('/signout', function(req, res) { 
    req.logout(); 
    res.redirect('/'); 
}); 

return router; 

} 

マイpassport.init.jsミドルウェアがあり、次のように

私authenticate.jsですExpressを実行するには、コントローラー内でres.jsonを実行し、JavaScriptオブジェクトを渡すだけです。 Expressはそれを自動的にJSONに変換してユーザーに返します。

return res.json({ success: 0, message: '' } 
関連する問題