2015-10-29 34 views
1

我是新來的護照,並試圖重新定向用戶到他們以前在Facebook上進行身份驗證後的頁面。我試圖在會話中設置一個「req.session.returnTo」屬性,但它在facebook/auth回調中一直消失(在該函數中的任何位置都會變成未定義)。我的方法有什麼問題?護照 - nodejs - 將用戶返回到上一頁之後Facebook的身份驗證

保護路線:

app.post('/api/recipebox', ensureAuthenticated, function (req, res) { 

}); 

ensureAuthenticated:

function ensureAuthenticated(req, res, next) { 
    if (req.isAuthenticated()) { 
     return next(); 
    } 

     req.session.returnTo = req.path; 

     res.redirect('/#!/login'); 

    } 

//Facebook/Passport.js回調:

app.get('/auth/facebook/callback', function (req, res, next) { 

    passport.authenticate('facebook', function (err, user, redirectURL) { 
     // console.log(' in the callback '); 
     if (err) { 
     console.log(err); 
     return res.redirect('/#!/login'); 
     } 

     if (!user) { 
     return res.redirect('/#!/signup'); 
     } 
     if (req.user) { 
     // console.log("==================== This is the user from routes.js", req.user); 
     res.cookie('user', JSON.stringify(user)); 
     } 
     //actually storing the fact that they are logged in: 
     req.login(user, function (err) { 
     if (err) { 
      return res.redirect('/#!/login'); 
     } 

     // console.log('=========== here!', user); 
     res.redirect(req.session.returnTo || '/#!'); 
     req.session.returnTo = null; 

     }); 
    })(req, res, next); 
    }) 

回答

0

我結束了在客戶端上這樣使用路由:

app.use(function (req, res, next) { 
    //req.session.returnTo is available everywhere in router now. 
    //filter if it not auth/login/signup, then save it. only update return to when it's not one of those. 
    if (req.get('lastUrl') !== undefined) { 

    var lastUrl = req.get('lastUrl'); 

    if (lastUrl.indexOf("login") === -1 && lastUrl.indexOf("signup") === -1 && lastUrl !== "http://localhost:3000/#!/") { 

     req.session.returnTo = lastUrl; 
    } 
    console.log(req.session); 
    } 
    next(); 
}); 

希望:

$httpProvider.interceptors.push(function ($q) { 

    return { 
     request: function (request) { 
     // console.log("hello"); 
     // console.log(window.location.href); 
     request.headers.lastUrl = window.location.href; 
     return request; 
     }, 
     responseError: function (response) { 
     return $q.reject(response); 
     } 
    }; 
    }); 

,這在服務器上它有助於他人。我沒有幸運與successRedirect,我不認爲這將是如此簡單,如果你最終在頁面登錄/註冊/從頁面一起帶走。

0

我使用的是本地策略的電子郵件地址和密碼登錄。我提到以下鏈接來設置我的護照JS身份驗證和登錄:Passport Facebook

  1. 使用上面的鏈接中看到的Facebook戰略。
  2. 所看到如下

    app.get('/auth/facebook/callback',passport.authenticate('facebook', 
               successRedirect: 'whatever-url-you-want', 
               failureRedirect: '/login' }));