2012-11-16 23 views
0

我有一個完整的網站,有兩種不同語言的上下文。唯一的公共頁面是兩種語言的登錄頁面。其餘的應該是私人的/受保護的。這是我通過資源組和匿名用戶的限制實現的。 在着陸頁上,匿名用戶應該看到所有受保護的菜單條目,並且如果點擊了帶有兩個登錄表單的彈出框,則應該顯示該菜單條目。這些登錄表單來自其他網站,如果用戶在輸入憑據時有權限,則返回。只要這個會話存在,用戶應該能夠查看所有頁面,如果用戶被批准的話。如何爲前端上的特定專用資源組創建用戶會話?

作爲一個非modx或php-pro我的猜測是,我應該檢查加載着陸頁時是否存在會話(以及所有子頁面)。如果沒有用戶登錄,所有鏈接都將指向彈出窗口。用戶然後登錄,將信息發送到外部服務器,並在成功時重定向到私有/受保護的登錄頁面。這是我無法找到任何信息,可能是因爲我不完全確定要查找什麼。 我需要一個代碼片段來檢查受保護頁面是否存在有效會話,如果不顯示登錄。 我需要的其他代碼是爲用戶創建會話,如果外部登錄成功。這應該是服務器上的一個片段還是一個PHP文檔。我該如何啓動受保護頁面的會話?

回答

1

你可以以兩種不同的方式做到這一點:

  1. 使未連接到鏌鋣用戶的系統。我覺得這很簡單,而且我之前做過幾次。您需要爲使用用戶名和密碼的用戶創建一個表,然後將對象從其中創建出來,以便您可以使用xpdo執行查詢。在這個系統啓動並運行的情況下,在每個模板中包含代碼段以確保用戶確實已登錄,這不成問題。如果不是,只需將他重定向到正確的首頁/登錄頁面即可。這將需要一些編碼,但正如我所說,它像一個魅力。

  2. 下載代碼片段http://modx.com/extras/package/login(由Spittingred,一個真實的傳說),並看看代碼。我之前沒有使用過這個Extra,但我很確定它使用與Modx相同的用戶系統,因此您應該能夠實現您想要的。我無法給你更多的幫助,而不是「看看源頭並找出Spittingred是如何做到的」。

1

鏌鋣革命檢查用戶是否登錄試圖訪問受保護的頁面時,但如果你想手動檢查這個片段會做:

if (!$modx->user->hasSessionContext($modx->context->get('key'))) { 
    $modx->sendUnauthorizedPage(); // redirect to the informative page for non-logged users 
} 

如果您需要檢查用戶被記錄並顯示登錄彈出如果沒有,那麼使用簡單的用戶ID檢查輸出調節劑可以工作:

[[+modx.user.id:if=`[[+modx.user.id]]`:eq:=`0`:then=`Not logged in`:else=`logged in`]] 

當它關係到會話創建從鏌鋣站點之外認證的用戶,我會建議寫一個檢查站的片段tus從永恆的頁面登錄並將用戶登錄。通過這種方式會話檢查將被忽略,但仍然應該實現功能目標。

+0

謝謝,但我的問題是關於如何爲特定資源組啓動用戶會話,就像標題中所述。 :) –

相關問題