3

ソースコードで見たものから、RequiresAuthentication() はモジュール全体の認証チェックを行います。ルートごとにこれを行う方法はありますか?

4

3 に答える 3

5

私も同じ問題を抱えていました。ただしRequiresAuthentication、モジュール レベルとルート レベルの両方で機能することがわかります。実証するために、ここに私の現在のプロジェクトを切り取ったコードをいくつか示します (簡潔にするためにすべてのルートを示しているわけではありません)。

public class RegisterModule : _BaseModule
{
    public RegisterModule() : base("/register")
    {
        Get["/basic-details"] = _ => View["RegisterBasicDetailsView", Model];

        Get["/select"] = _ =>
            {
                this.RequiresAuthentication();
                return View["RegisterSelectView", Model];
            };
    }
}

もちろん、この方法で行う唯一の問題は、モジュール内の保護されたすべてのルートが を呼び出す必要があることRequiresAuthenticationです。上記のモジュールの場合、別の 5 つのルート (表示されていません) があり、そのすべてを保護する必要があるためRequiresAuthentication、モジュール レベルで 1 つではなく 6 つの呼び出しが行われます。代わりに、保護されていないルートを別のモジュールにプルすることもできますが、モジュールの急増は、追加の RequiresAuthentication 呼び出しよりも悪いと判断しました。

于 2012-08-30T08:15:36.867 に答える
1
namespace Kallist.Modules {

    #region Namespaces

    using System;
    using Nancy;

    #endregion

    public static class ModuleExtensions {

        #region Methods

        public static Response WithAuthentication(this NancyModule module, Func<Response> executeAuthenticated) {
            if ((module.Context.CurrentUser != null) && !string.IsNullOrWhiteSpace(module.Context.CurrentUser.UserName)) {
                return executeAuthenticated();
            }
            return new Response { StatusCode = HttpStatusCode.Unauthorized };
        }

        #endregion

    }
}
于 2012-08-30T20:37:10.887 に答える