2016-11-21 63 views
4

我正在使用護照js進行登錄註冊過程。一旦有新用戶登錄,cookie就會在包含數據庫唯一密鑰的瀏覽器上創建(由我自定義)。手動創建已登錄的護照會話用戶

因此,該程序的工作原理是:

如果新的人登錄Cookie是這個函數創建

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

然後登錄頁面上輸入的信息被髮送到發佈的服務器功能(護照JS)。下面 本地策略驗證碼給出(同樣遵循客人,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自動驗證使用的策略信息的地方,客人,Facebook,微博等,如果正確的話它創建會議

但是,如果一個已經登錄過的人進入網站,它首先會檢查瀏覽器中是否存在cookie,如果它存在,它會挑選數據庫密鑰

知道密鑰後,它會從數據庫(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(); 
      } 
     } 

}

下一個()導致:

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

我怎麼可以手動創建護照會在用戶已經登錄?

回答

3

經過一些研究,我認爲你正在尋找護照openid我發現在文檔here

您可以從文檔閱讀的OpenID,但我想你可以把你的DB密鑰作爲標識符標記和識別功能做DB檢查,如果DB鍵檢查出來它送回用戶,這應該根據您已經登錄的用戶爲用戶創建會話。

我會給代碼示例和如何安裝的OpenID,但他們已經在docs

+0

感謝您的努力,但我應該在哪裏發回用戶? – wrangler

+0

這是一個像我不清楚。看看文檔,我猜想用戶對象在例子 'User.findOrCreate({openId:identifier},function(err,user){err,user}; });' 或者檔案交換部分。 –

3

我認爲你必須落實serializeUserdeserializeUser功能,爲它工作,如會議款的規定配置文檔的部分。 Link