• NancyFx 2.0的开源框架的使用-Authentication


    新建一个空的项目

    新建好了空的项目以后,接着通过NuGet安装一下三个包

    • Nancy
    • Nancy.Hosting.Aspnet
    • Nancy.ViewEnglines.Razor

    然后在项目中添加Models,Module,Views三个文件夹,并在Models中添加UserModel类

            public string  Username { get; set; }
            public UserModel(string username)
            {
                this.Username = username;
            }

    然后往Module文件夹里面添加MainModule类

     Get("/", Lexan => { return View["index.cshtml"]; });
                Get("/login", Lexan => { return View["login.cshtml",this.Request.Query.returnUrl]; });

    再继续添加SecureModule类,AnotherVerySecureModule类

            public SecureModule():base("/secure")
            {
                this.RequiresAuthentication();
                Get("/",Lexan=>
                {
                    var model = new UserModel(this.Context.CurrentUser.Identity.Name);
                    return View["secure.cshtml",model];
                });
            }

     public AnotherVerySecureModule():base("/superSecure")
            {
                this.RequiresClaims(Lexan=>Lexan.Type==ClaimTypes.Role&&Lexan.Value=="SuperSecure");
                Get("/",Lexan=> 
                {
                    var model = new UserModel(this.Context.CurrentUser.Identity.Name);
                    return View["superSecure.cshtml",model];
                });
            }

    根目录添加AuthenticationBootstrapper类

            protected override void ApplicationStartup(TinyIoCContainer container, IPipelines pipelines)
            {
                base.ApplicationStartup(container, pipelines);
                pipelines.BeforeRequest += ctx =>
                  {
                      var username = ctx.Request.Query.username;
                      if (username.HasValue)
                      {
                          ctx.CurrentUser = new ClaimsPrincipal(new ClaimsIdentity(BuildClaims(username), "querystring"));
                      }
                      return null;
                  };
                pipelines.AfterRequest += ctx =>
                  {
                      if (ctx.Response.StatusCode==HttpStatusCode.Unauthorized)
                      {
                          ctx.Response = new RedirectResponse("/login?retutnUrl="+ Uri.EscapeDataString(ctx.Request.Path));
                      }
                  };
            }
            private static IEnumerable<Claim> BuildClaims(string userName)
            {
                var claims = new List<Claim>();
                if (String.Equals(userName,"Lexan",StringComparison.OrdinalIgnoreCase))
                {
                    claims.Add(new Claim(ClaimTypes.Role,"SuperSecure"));
                }
                return claims;
            }

    继续在Views里添加视图index,login,secure,superSecure

    再然后修改一下Web.config如下图

    运行如下图

    谢谢观看!

  • 相关阅读:
    Java中的System类
    关于Java IO流学习总结
    Java InputStream、String、File相互转化
    Java 里把 InputStream 转换成 String 的几种方法
    详细讲解JAVA中的IO流
    获取 request 中 json 数据
    oracle count 百万级 分页查询记要总数、总条数优化
    ORACLE分页SQL语句
    ORACLE中用rownum分页并排序的SQL语句
    day7
  • 原文地址:https://www.cnblogs.com/R00R/p/6832931.html
Copyright © 2020-2023  润新知