Manually create a passport session for already registered users

I am using js passport to register. When a new user logs into a cookie, it is created (configured by me) in a browser that contains a unique DB key.

So how the program works:

If a new user registers a cookie, this function is created.

function setCookie(cname,cvalue,exdays) {
    //alert("Cookie set on tedJavascript");
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+d.toUTCString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
}

then the data entered on the login page is sent to the post-function on the server (passport js). The local strategy authentication code is shown below (the same goes for guest, fb, etc.)

passport.use('guest',new LocalStrategy(
function(username,password,done){
       User.getUserBycookie(password, function(err, user){
       if(err) throw err;

        //if cookie present (checked in terms of password)
       if(user){
                    //Some code
                    user.save()
                        }
                        else{
                            console.log("some problem with updating guest   user by db id!");
                        }
                    });

                    return done(null, user);
        }

//if cookie not present
else {              
                    // some part of code for new user

                    var newUser = new User();
                    newUser.guest.cookie = newUser._id;
                    trophytable_id = newUser._id;
                    newUser.guest.name = username;
                    newUser.save(function(err){
                        if(err) throw err;
                        return done(null, newUser);
                    });

     }});}));

The js passport automatically authenticates information using the strategies local, guest, facebook, twitter, etc., if it is correct, a session is created .

, , cookie , DB.

, , (mongodb) .

, , , . , .

function ensureAuthenticated(req, res, next){
console.log("Inside ensureAuthenticated...............");
if(req.isAuthenticated()){
    console.log("Inside if part of ensureAuthenticated-------");
    console.log(req.cookies);
    return next();
} else {
            console.log("Inside else part of ensureAuthenticated----------");
            console.log(req.cookies.user_id);
            if(isEmpty(req.cookies.user_id)){
                console.log("user_id == undefined");
                res.redirect('/users/login');
            }
            else{
                 console.log("user_id defined");
                 return next();
            }
        }

}

next() :

router.get('/',ensureAuthenticated, function(req,res){
console.log("Inside router get ensure authenticated--------------------");
if(isEmpty(req.session.passport)){
    //**have to create new session**

    //**getting user details from database**
    User.getUserBydbid(req.cookies.user_id, function(err, user){
        if(err) throw err;
        if(user){
            if(!isEmpty(user.local)){

               //**here i want to create session**

           }else if(!isEmpty(user.guest)){

                    //**here i want to create session**

                }
                 //skipped fb,twitter code
        }                   
        else console.log("*********some problem in finding     getUserBydbid");
    });

     //after creating session want to redirect to main menu 
     //it works but session not created
    //res.render('index',{userid:req.cookies.user_id});
}
else{
    //for newly logged in user
    res.render('index',{userid:req.session.passport.user});
}});

?

+4
2

, openid, .

OpenID , , , - , , , .

OpenID, docs

+3

, serializeUser deserializeUser , , .

+3

Source: https://habr.com/ru/post/1661417/