MEAN堆栈应用程序上的用户验证

时间:2017-03-27 17:22:50

标签: node.js

我正在使用MEAN堆栈构建API,并正在处理登录和注册功能。

我想用json字符串回复如下

{
success: 0,
message: ""
}

成功:1表示成功登录,0表示否则。

我的authenticate.js如下

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中间件如下

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

};

请相应地传递JSON字符串帮助我

1 个答案:

答案 0 :(得分:0)

使用Express,您所要做的就是在任何控制器中执行res.json,并将任何JavaScript对象传递给它。 Express会自动将其转换为JSON并将其返回给用户。

return res.json({ success: 0, message: '' }