2014-11-03 55 views
6

我有一個管理多個域的laravel Web服務器,如:laravel跨域身份驗證cookie和過濾器

site1.domain.com, site2.domain.com, site3.domain.com 

我有很大的成功加入網站名稱,用戶的認證過程,從而有每個用戶的單個表格就網站而言。跨網站沒有用戶的持久性,他們被認爲是獨一無二的。這很好。

對於每個站點,都有一個後端,例如。爲此,我有一組不同的模型管理員用戶。爲了使這項工作,我有一組完全不同的身份驗證路徑,一個不同的控制器和所有這些。我用下面的過濾器實現了這一點。

App::before(function($request) 
{ 
    if ($request->is('office*')) 
    { 
    Config::set('auth.driver', 'eloquent.admin'); 
    Config::set('auth.model', 'Admin'); 

這些管理員在各個域之間很常見。也就是說,用戶名在管理模式中是唯一的。

這很好,但需要繼續前進。

我希望登錄和註銷在站點之間保持一致。也就是說,如果管理員登錄到一個站點辦公室,他們已經登錄了所有登錄,並且他們註銷了所有登錄,他們都已經註銷。

我試圖這樣來更新我的過濾器:

App::before(function($request) 
{ 
    if ($request->is('office*')) 
    { 
    Config::set('auth.driver', 'eloquent.admin'); 
    Config::set('auth.model', 'Admin'); 

    Config::set('session.path', '/office'); 
    Config::set('session.domain', '.domain.com'); // tried without leading . too 
    } 
}); 

但是,如果我分析了我的餅乾在我的瀏覽器,域和路徑信息並沒有受到影響,仍然是site.domain.com和/分別。

您能否告訴我如何根據我的要求更改會話cookie屬性?

有一個網站的依賴。儘管管理員和站點之間存在多對多的關係,這決定了管理員可以訪問特定站點的/辦公室。

我擔心的是管理員已登錄,他們將訪問任何網站辦公室。

我的意圖是編寫一個額外的過濾器「可以管理這個網站」,這將檢查關係。

您認爲這是適用於管理員提議的跨域身份驗證上下文的適當措施嗎?

+0

如果您不介意所有用戶在網站之間共享,則可以將cookie域更改爲'.domain.com'。 其他選項是創建新的身份驗證警衛/模型,它會生成/檢查單獨的JWT cookie。 – Sigismund 2017-03-11 04:55:46

回答

0

如果您打開app/config/session.php您使用的驅動程序是什麼?有些文件(如文件)似乎並未將數據存儲在通配符子域中。

我解決了這個使用Redis的(如果你使用的宅基地,應該是已經提供給您):

'driver' => 'redis', 

    'redis' => array(

    'cluster' => true, 

    'default' => array(
     'host'  => '127.0.0.1', 
     'port'  => 6379, 
     'database' => 0, 
    ), 

), 

這是與不同的驅動程序如何使用主機名來引用會話做數據。