2015-06-27 40 views
6

我試圖阻止重定向到登錄頁面,當用戶試圖訪問一個頁面沒有令牌時,我有單頁面的應用程序,我只把ajax請求放在防火牆下,當用戶在做AJAX無令牌我想了ajax返回禁止例外,所以我將能夠趕上它在客戶端symfony2安全 - 禁用登錄路徑和禁止顯示

目前AJAX的回報,因爲要求「發現」被重定向到登錄頁面

我還沒有找到一個解決方案在食譜到目前爲止我不想使用API​​令牌,只發送異常而不是重定向登錄

回答

7

您需要爲防火牆定義一個entry_point,以便您返回未經授權的響應。有關入口點的信息可以在文檔here中找到。我將在這裏複製該段以防未來的要求。

當用戶根本沒有被認證時(即當令牌存儲器還沒有令牌時),防火牆的入口點將被調用以「啓動」認證過程。一個入口點應該實現AuthenticationEntryPointInterface,它只有一個方法:start()。該方法接收當前的Request對象和異常偵聽器被觸發的異常。該方法應該返回一個Response對象。例如,這可能是包含登錄表單的頁面,或者在基本HTTP身份驗證的情況下,具有WWW-Authenticate標頭的響應,該響應將提示用戶提供其用戶名和密碼。

所以爲了讓你做到這一點,你必須創建一個將被定義爲服務的類。

它應該是這樣的:

namespace MyBundle\Service; 

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface; 
use Symfony\Component\Security\Core\Exception\AuthenticationException; 

class CustomEntryPoint implements AuthenticationEntryPointInterface 
{ 

    public function start(Request $request, AuthenticationException $authException = null) 
    { 
     $response = new Response("", Response::HTTP_UNAUTHORIZED); 

     return $response; 
    } 

} 

而在你services.yml文件

services: 
    service.entry_point: 
     class: MyBundle\Service\CustomEntryPoint 

最後通過服務ID service.entry_pointentry_point選項security.yml文件firewall部分。

這應該可以做到。

+0

是否可以使用'entry_point'來禁用auth? –