手动创build已login用户的护照会话

我正在使用护照js进行login注册。 一旦有新用户login,就会在包含数据库唯一密钥的浏览器上创build(由我自定义)cookie

所以程序如何工作是:

如果一个新的人login一个cookie是由这个函数创build的

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

那么在login页面上input的详细信息将被发送到服务器上的发布function(护照js)。 本地策略authentication码如下(guest,fb等同)

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

护照js自动validation信息使用策略本地,客人,脸谱,微博等,如果正确创build会话

但是,如果一个已经login过的人进入网站,它首先会检查浏览器中是否存在一个cookie,如果它存在的话,它会挑选出DB密钥

知道密钥后,它从数据库(mongodb)中查找用户的详细信息,并直接跳过login页面并redirect到主菜单。

但问题是它redirect到主菜单,但无法创build会话,可能会进一步创build问题所以要创build一个新的用户自动创build的会话自动创build会话

这是确保authenticationfunction

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

我如何手动创build已login用户的护照会话?

       

网上收集的解决方案 "手动创build已login用户的护照会话"

经过一番研究,我认为你正在寻找护照openid我发现在这里的文档。

您可以从Docs中了解OpenID,但是我认为您可以将您的数据库密钥作为标识符令牌,并在标识function中进行数据库检查,如果数据库密钥检查出它发送回用户,这应该创build一个会话用户基于您已经login的用户。

我会给代码示例,以及如何安装OpenID,但他们已经在文档中

我认为你必须实现serializeUserdeserializeUser函数才能工作,正如在文档configuration部分的Sessions子部分所述。 链接 。