2

I have a problem with my MVC 4.0/Razor site.

It's a (not yet launched) public site that I recently inherited. 90% of all pages should be available to everyone, the rest are for superusers and need authentication.

This is handled via an AllowAnonymous attribute on the public facing pages, implemented like this;

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);

    }
}

Now, the problem is that I want a few customizations of the public facing sites (for the sake of argument, let's assume a "Currently logged in: XYZ"-label somewhere). What I've tried is using the User.Identity, but on all pages with AllowAnonymous, User.Identity.Name == "", even though a super user did log in. (And if he changes the url to a page with authentication, he's logged in again, and User.Identity.Name is correct).

Is there any way to both use Allow Anonymous and keep track of who's logged in?

4

1 に答える 1

0

私はこれを解決したと思います。

問題は、カスタム サブドメインのルーティングでした。Cookie(主にaspxauth)の.example.com代わりに指すように、「ドメイン」設定をオーバーライドする必要がありました。example.com

これが実現するのに時間がかかった理由は、アプリケーションに干渉する可能性のある他の多くのカスタム パーツでした。

  • カスタム メンバーシップ プロバイダー
  • カスタム AllowAnonymous 属性 (標準属性が存在する場合でも)
  • そして、実際にはそうではないのに、これが通常の動作だと思っていたという事実。

概要: サブドメイン ルーティング ルールを実装し、サブドメインに沿った認証が必要な場合は、Cookie のベース ドメインを変更する必要があります。

于 2012-09-10T13:39:09.977 に答える