如果 RequiresAuthentication 中缺少声明,则重定向

Redirect if claim is missing in RequiresAuthentication

我正在努力在我的应用程序中设置双因素,如果用户已登录但未经过验证,我会尝试使其重定向回验证页面(我正在跟踪是否用户在添加到 ClaimsPrincipal 'IsVerified') 的会话 table 中得到验证。

我遇到的问题是我在文档中使用的示例似乎无法正常工作:

public static class ModuleSecurity
    {
        public static string[] ExcludedPaths = { "/", "/login", "/login/verify", "/admin/settings", "/login/tf/setup" };

        public static void RequiresAuthentication(this NancyModule module)
        {
            module.Before.AddItemToEndOfPipeline(RequiresAuthentication);
        }

        private static Response RequiresAuthentication(NancyContext context)
        {
            // Check if user is authenticated
            if (context.CurrentUser == null)
                return new Response() { StatusCode = HttpStatusCode.Unauthorized };

            if (context.CurrentUser.FindFirst("RequireVerification")?.Value == "True" && context.CurrentUser.FindFirst("IsVerified")?.Value != "True" && !ExcludedPaths.Any(x => x.ToLower() == context.Request.Path.ToLower()))
                return new Response().WithHeader("Location", "/login/verify").WithContentType("text/html").WithStatusCode(HttpStatusCode.SeeOther);

            return null;
        }
    }

设置断点 我看到 "module.Before.AddItemToEndOfPipeline" 已执行,但它没有执行我的其他方法。

然后问题是我将其添加到 BEFORE 管道,但我在路由被触发后调用 this.RequiresClaims(所以我需要 AFTER 管道)。我能够通过添加扩展并使用 module.AddBeforeOrExecute 选项来做到这一点。