开源 示例代码:https://github.com/linezero/NancyDemo

上篇讲解Nancy的Basic Authentication,现在来学习Nancy 的Forms身份认证。

本篇主要讲解Forms authentication ,Forms身份认证

说明:本篇示例是基于 Nancy 1.4.3。Nancy 2.0预览版 已经发布,版本改动较大,故特此说明。

准备

安装 Nancy.Authentication.Forms

Install-Package Nancy.Authentication.Forms -Version 1.4.1

实战

继续在示例中添加代码,没有新建项目。

1.实现 IUserMapper 接口

新建一个 FormsUserMapper 类实现接口 IUserMapper

    public class FormsUserMapper : IUserMapper
{
private static List<Tuple<string, string, Guid>> users = new List<Tuple<string, string, Guid>>(); public FormsUserMapper()
{
users.Add(new Tuple<string, string, Guid>("linezero", "demo", new Guid("19FF111D-DCF5-4FFC-9CFA-4C256E7C9748")));
users.Add(new Tuple<string, string, Guid>("nancy", "demo", new Guid("18FF111D-DCF5-4FFC-9CFA-4C256E7C9748")));
} public IUserIdentity GetUserFromIdentifier(Guid identifier, NancyContext context)
{
var userRecord = users.Where(u => u.Item3 == identifier).FirstOrDefault(); return userRecord == null
? null
: new FormsUser { UserName = userRecord.Item1 };
} public static Guid? ValidateUser(string username, string password)
{
var userRecord = users.Where(u => u.Item1 == username && u.Item2 == password).FirstOrDefault(); if (userRecord == null)
{
return null;
} return userRecord.Item3;
}
}

这里我简单的写了个多个用户,而不是之前的单个用户。

Nancy身份认证都涉及到IUserIdentity 接口,这里我为了区分之前的Basic 认证,新建了一个FormsUser 类实现IUserIdentity。

2.添加登录登出

添加一个module ,来实现登录登出。

新建FormsModule 类,并建立对应文件夹。

新建一个登录页:

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>登录</title>
</head>
<body>
<form method="post">
Username
<input type="text" name="Username" />
<br />
Password
<input name="Password" type="password" />
<br />
Remember Me
<input name="RememberMe" type="checkbox" value="True" />
<br />
<input type="submit" value="Login" />
</form>
@if (Model.Errored)
{
<div id="errorBox" class="floatingError">用户名或密码错误</div>
}
</body>
</html>

接受登录信息:

            Post["/login"] = r =>
{
var userGuid = FormsUserMapper.ValidateUser((string)this.Request.Form.Username, (string)this.Request.Form.Password); if (userGuid == null)
{
return this.Context.GetRedirect("~/forms/login?error=true&username=" + (string)this.Request.Form.Username);
} DateTime? expiry = null;
if (this.Request.Form.RememberMe.HasValue)
{
expiry = DateTime.Now.AddDays();
} return this.Login(userGuid.Value, expiry);
};

更多详细代码,请看示例代码。

3.配置启用Forms身份认证

在Bootstrapper 的ApplicationStartup 添加如下代码:

            container.Register<IUserMapper, FormsUserMapper>();//Forms 认证
var formsAuthConfiguration = new FormsAuthenticationConfiguration()
{
RedirectUrl = "~/forms/login",
UserMapper = container.Resolve<IUserMapper>(),
};
FormsAuthentication.Enable(pipelines, formsAuthConfiguration);//启用Forms 认证

在需要授权的Module 加上就可以开启。

            this.RequiresAuthentication();

由于示例代码存在Basic 认证,我将其注释了。只保留Forms。

4.实现效果

访问: http://localhost:9000/

成功登录后 访问:http://localhost:9000/forms/

示例代码下载:https://github.com/linezero/NancyDemo

示例代码包含之前示例,并且会持续更新,欢迎大家Star。

如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

Nancy 学习-身份认证(Forms authentication) 继续跨平台的更多相关文章

  1. Nancy 学习-身份认证(Basic Authentication) 继续跨平台

    开源 示例代码:https://github.com/linezero/NancyDemo 前面讲解Nancy的进阶部分,现在来学习Nancy 的身份认证. 本篇主要讲解Basic Authentic ...

  2. 【Shiro】Apache Shiro架构之身份认证(Authentication)

    Shiro系列文章: [Shiro]Apache Shiro架构之权限认证(Authorization) [Shiro]Apache Shiro架构之集成web [Shiro]Apache Shiro ...

  3. 理解ASP.NET Core - 基于Cookie的身份认证(Authentication)

    注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 概述 通常,身份认证(Authentication)和授权(Authorization)都会放 ...

  4. 认识ASP.NET Windows身份认证

    本文摘自:细说ASP.NET Windows身份认证 Forms身份认证虽然使用广泛,不过,如果是在 Windows Active Directory 的环境中使用ASP.NET, 那么使用Windo ...

  5. Wifi 开放系统认证和共享密钥身份认证

    记录开放系统认证和共享密钥认证的区别. 开放系统身份认证(open-systern authentication) 是802.11 要求必备的惟一方式. 由行动式工作站所发出的第一个帧被归类为auth ...

  6. 构建基于分布式SOA架构的统一身份认证体系

    摘要:本文充分利用SOA架构松耦合的特点,通过规范统一网络接口实现业务系统整合,既提升系统安全性,又简化资源访问操作,具有重要的理论和现实意义. 统一身份认证旨在将分散在各个信息系统中的用户和权限资源 ...

  7. Shiro官方快速入门10min例子源码解析框架3-Authentication(身份认证)

    在作完预备的初始化和session测试后,到了作为一个权鉴别框架的核心功能部分,确认你是谁--身份认证(Authentication). 通过提交给shiro身份信息来验证是否与储存的安全信息数据是否 ...

  8. 接口测试 requests的身份认证方式

    requests提供多种身份认证方式,包括基本身份认证.netrc 认证.摘要式身份认证.OAuth 1 认证.OAuth 2 与 OpenID 连接认证.自定义认证.这些认证方式的应用场景是什么呢? ...

  9. 权限管理学习 一、ASP.NET Forms身份认证

    说明:本文示例使用的VS2017和MVC5. 系统无论大小.牛逼或屌丝,一般都离不开注册.登录.那么接下来我们就来分析下用户身份认证. 简单实现登录.注销 以前在学习.net的时候不知道什么Forms ...

随机推荐

  1. C#可扩展编程之MEF学习笔记(三):导出类的方法和属性

    前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供 ...

  2. Javascript事件模型系列(二)事件的捕获-冒泡机制及事件委托机制

    一.事件的捕获与冒泡 由W3C规定的DOM2标准中,一次事件的完整过程包括三步:捕获→执行目标元素的监听函数→冒泡,在捕获和冒泡阶段,会依次检查途径的每个节点,如果该节点注册了相应的监听函数,则执行监 ...

  3. C#中使用反射获取结构体实例

    一般用反射获取类对象的实例比较简单,只要类有一个无参构造函数或没有显示声明带参的构造函数即可使用如下代码 static void Main(string[] args) { Type type = t ...

  4. read links July-14

    1)   http://ruby-hacking-guide.github.io/intro.html It has one part to discuss “Technique to read so ...

  5. Git学习笔记(3)——撤销修改和文件的删除

    本文主要记录了git中,错误的撤销和文件的删除. 撤销修改 这里有3中情况 改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file. 不但改乱了工作区某个 ...

  6. 自已写的Json序列化方法,可以序列话对象的只读属性

    /* * by zhangguozhan 2015/1/5 * P2B.Common.CJson.ConvertJson.ObjectToJson<SenderDomainModel>方法 ...

  7. jsp中运用application实现共享留言板功能

    jsp中application的知识点总结: 1.一个Web应用程序启动后,将会自动创建一个application对象,在整个应用程序的运行过程中只有这一个application对象,即所有访问该网站 ...

  8. Canvas 内部元素添加事件处理

    目录 前言 自定义事件 有序数组 元素父类 事件判断 其他 立即执行函数 apply, call, bind addEventListener 传参 调用父类的构造函数 对象检测 isPointInP ...

  9. Atitit.编译原理与概论

    Atitit.编译原理与概论 编译原理 词法分析 Ast构建,语法分析 语意分析 6 数据结构  1. ▪ 记号 2. ▪ 语法树 3. ▪ 符号表 4. ▪ 常数表 5. ▪ 中间代码 1. ▪ 临 ...

  10. poi操作excel的基本用法

    这周公司要用excel作为数据存储格式做一个文具申请的功能,感觉以前本来很简单的功能变复杂了不少,但是还是记录一下一些excel的基本用法. 写在最前面:这里只介绍一些excel的基本存储方式(读,写 ...