0
我做了一箇中間件,在每次請求之前對用戶進行身份驗證,並在整個應用程序的開始時應用它。如何從Silex中的認證中間件中排除登錄路由?
$app->before(function($request, $app) { Auth::authenticate($request, $app); });
但它也適用於登錄路由如何解決這一問題? 這是一個Rest API。
我做了一箇中間件,在每次請求之前對用戶進行身份驗證,並在整個應用程序的開始時應用它。如何從Silex中的認證中間件中排除登錄路由?
$app->before(function($request, $app) { Auth::authenticate($request, $app); });
但它也適用於登錄路由如何解決這一問題? 這是一個Rest API。
您的中間件正在所有路由之前運行。所以,你可能有這樣的路線:
$routes->match('/login', function() use ($app) {
// Login etc.
});
或者你正在使用,GET的POST或其他。中間件將始終在路由運行之前運行。所以是的,你的中間件在登錄之前也會被應用,因爲它適用於每一個路由。
您可以通過類似這樣您登錄路由後運行的中間件解決這個問題:在這個
$routes->match('/login', function() use ($app) {
// Login etc.
})
->after($after);
更多細節可以發現here!
您也可以更改您的中間件,以便它首先檢查用戶是否已經登錄。如果是這樣,運行身份驗證,如果不是......什麼也不做。
$app->before(function($request, $app) {
if user is logged in {
Auth::authenticate($request, $app);
}
});
我希望這可以幫助你。不要忘記標記爲已完成,否則,請留下評論或編輯您的問題,我會幫助您!
你最後的例子是我總是這樣做。 – Maerlyn
你的最後一個例子意味着它不會進行身份驗證,如果它沒有登錄,我想在這兩種情況下進行身份驗證,但問題是當登錄路由開始時,它需要身份驗證頭和令牌也是錯誤的我需要一種方法排除登錄路線,我不想重複自己,併爲每條路線手動執行,我的問題是登錄路線 –