2014-06-12 91 views
0

我正在使用Nodejs(使用Sails & Passport框架)開發網站。我想知道Sails控制器如何獲取用戶的請求歷史記錄。 例如,用戶請求'/',但控制器會將用戶重定向到'/ signin'。然後用戶使用res.redirect()請求'/ signin'。因此,請求歷史看起來像Sails控制器如何獲取請求歷史記錄

  1. '/'
  2. '/登入'。

現在SignInController處理這個請求,最後它想把用戶重定向回'/'。所以控制器應該知道用戶請求的歷史。我想應該有一些框架可以記錄請求歷史並使用會話或其他東西存儲它們。任何人都可以給我一些關於這個的提示嗎?

+0

你的意思是「重定向」? http重定向(如301)? – mdunisch

+0

是的。使用重定向的http重定向() – RandyTek

回答

2

讓我知道如果我理解得好,但是你想要做的是將用戶重定向到登錄前的任何URL,對嗎?

要做到這一點,您可以使用策略(針對所有請求執行的策略,只針對您想要的方法執行)。 我們在這裏做的是保存最新的位置只(而不是整個歷史)

API /政策/ ensureReturnToUrl

'use strict'; 

module.exports = function (req, res, next) { 

    req.session.returnTo = req.url; 

    return next(); 
}; 

配置部分看起來像在配置/ policies.js

'*': ['passport', 'isAuthenticated', 'ensureReturnToUrl'], 
    AuthController: { 
    '*': ['passport'] 
    } 

您必須小心謹慎才能將此政策放在正確的位置。例如,你不希望在你的「/登錄」方法(這是違背整點)

然後,成功登錄後,你只需要閱讀「returnTo」屬性和重定向用戶:(例如,在AuthController

if (req.session.returnTo) { 
    res.redirect(req.session.returnTo); 
} else { 
    res.redirect('/'); 
} 

顯然,這需要適合您的使用情況,但政策肯定是你所需要的。

+0

ThxAurélien。您的解決方案正是我所需要的。但還有一個問題。其實你在這裏添加一個定製的中間件。但是,是否有任何現有的中間件可以通過npm安裝,從而避免重新發明輪子? – RandyTek

+0

事實上,是的,你可以直接使用這個:https://github.com/jaredhanson/connect-ensure-login然而,我必須自定義一些處理特定用例的/ register URL所以編寫我自己的策略更「容易」。但隨時選擇最適合你:) –

+0

Thx。非常感謝您的幫助。 – RandyTek