0

基本的には、Cookie がリクエストと共に送信され、それに値が割り当てられていることを単純に検証する、カスタムの authorize 属性があります。

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext == null)
            throw new ArgumentNullException("filterContext");

        bool skipAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true)
                      || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true);

        if (skipAuthorization) return;

        var cookie = filterContext.HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName];

        if (cookie != null)
        {
            var decCookie = FormsAuthentication.Decrypt(cookie.Value);

            if(decCookie != null)
            {
                if (!string.IsNullOrEmpty(decCookie.UserData))
                {
                    return;
                }
            }
        }

        HandleUnauthorizedRequest(filterContext);
    }

これは私が必要とすることを行いますが、コントローラーアクションでアクセスできる場所に decCookie.UserData を保存することは可能ですか? とにかくリクエストからコントローラーでそれを取得する拡張メソッドを作成しましたが、実際には属性が既に行ったことのコピーにすぎません。

それで、拡張メソッドを持たずに逃げて、属性からコントローラで後で使用するために UserData をどこかに保存する方法はありますか?

4

1 に答える 1

1

Use a custom principal and identity, and store whatever data you'd like on the identity. See MVC 3.0, Razor, Custom Principal and Identity. For a good intro. Only disregard the bit about using Application_AuthenticateRequest, that's what your Authorize attribute is for.

于 2013-02-26T19:47:28.370 に答える