Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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
Node.js meanstack应用中的用户认证_Node.js - Fatal编程技术网

Node.js meanstack应用中的用户认证

Node.js meanstack应用中的用户认证,node.js,Node.js,我正在使用MEAN堆栈构建一个API,并且正在处理登录和注册函数 我想用一个json字符串来响应,如下所示 { success: 0, message: "" } module.exports = function(passport){ //log in router.post('/login', passport.authenticate('login', { //success //failure })); //sign up router.post('/signup'

我正在使用MEAN堆栈构建一个API,并且正在处理登录和注册函数

我想用一个json字符串来响应,如下所示

{
success: 0,
message: ""
}
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;

}
成功:1表示登录成功,0表示登录成功

我的authenticate.js如下

{
success: 0,
message: ""
}
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);
};

};

请帮助我使用Express相应地传递JSON字符串,您所要做的就是在任何控制器内执行
res.JSON
,传递任何JavaScript对象。Express将自动将其转换为JSON并返回给用户

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

想要一大笔小费吗?对于简单的身份验证,跳过使用passport,因为它比许多场景所要求的更复杂。查看类似于
jwtsimple
的内容,确保您了解身份验证是如何发生的。