2

我的MVC 4.0/Razor站點出現問題。MVC允許匿名,登錄後仍能獲得當前用戶

這是我最近繼承的(尚未啓動)公共站點。 所有頁面的90%應該對所有人都可用,其餘的對於超級用戶並需要認證。

這是通過面向公衆的頁面上的AllowAnonymous屬性來處理的,它是這樣實現的;

public class RequireAuthenticationAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var skipAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true) || 
           filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(
            typeof(AllowAnonymousAttribute), true); 
     if (!skipAuthorization) 
      base.OnAuthorization(filterContext); 

    } 
} 

現在的問題是,我想在面向公衆的網站的一些自定義(爲便於討論,我們假設一個「目前登錄:XYZ」 -label的地方)。我試過的是使用User.Identity,但在所有具有AllowAnonymous,User.Identity.Name ==「」的頁面上,即使超級用戶登錄。(如果他將url更改爲頁面身份驗證,他再次登錄,並且User.Identity.Name是正確的)。

有什麼辦法可以同時使用Allow Anonymous和跟蹤誰登錄?

回答

0

我想我已經解決了這個問題。

問題是我們的自定義子域路由。我不得不覆蓋「域」設置,因此它指向.example.com而不是example.com(主要是aspxauth)。

這花了一些時間,實現了其他一些定製的部分,潛在干擾的應用,尤其是其原因:

  • 自定義成員提供
  • 自定義使用AllowAnonymous屬性(甚至當有一個標準屬性現在)
  • 而事實上,我認爲這是正常的行爲,事實上並非如此。

摘要: 如果執行一個子域的路由規則,需要沿子域遵循認證,就必須改變餅乾的基礎領域。

相關問題