ソースコードで見たものから、RequiresAuthentication() はモジュール全体の認証チェックを行います。ルートごとにこれを行う方法はありますか?
質問する
1612 次
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 に答える