开源 示例代码: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. 赴美工作常识(Part 3 - 英语)

    在<Part 2 - 申请>的评论中有人问英语要达到何种水平,以及如何提高.其实英语也不是我的强项,只是刚刚好做到能够沟通而已.由于我在知乎上回到过一个类似问题,我就基于那个答案简单说一下 ...

  2. [安卓] 14、安卓HTTP——POST和GET用法分析

    内容简介 本文通过建立一个简单的Servlet服务器来分析安卓上用HTTP和服务器通信的细节,旨在演示C/S模式下服务器端和客户端的工作过程. 目录 part.1 用MyEclipse建立一个简单的s ...

  3. XSS危害——session劫持

    在跨站脚本攻击XSS中简单介绍了XSS的原理及一个利用XSS盗取存在cookie中用户名和密码的小例子,有些同学看了后会说这有什么大不了的,哪里有人会明文往cookie里存用户名和密码.今天我们就介绍 ...

  4. WebApi系列~基于单请求封装多请求的设计

    回到目录 怎么说,单请求封装多请求,这句话确实有点绕了,但还是要看清楚,想明白这到底是怎么一回事,单请求即一次请求(get,post,put,delete),封闭多请求,即在客户端发送的一个请求中可能 ...

  5. .NetCore~Linux环境下部署

    NetCore正式版已经出现有段时候了,Windows下使用vs2015开发.netCore应用程序,然后通过dotnet程序开启WEB服务,用着很像node.js,当然我们不会于只局限于window ...

  6. Excel快速改变行列的次序

    改变行列次序是在Excel中常常需要进行的操作,多数用户的方法是先剪切要调整的行或列,然后选定目标位置,单击菜单“插入”→“剪切单元格”.   事实上,使用键盘来配合的话,改变行列的次序可以更快捷.比 ...

  7. yar粗略使用记录

    yar是鸟哥(laruence)开发的一个并行的RPC框架.据说sina weibo已经在大规模使用这个框架了.今天初步使用了下,觉得还是挺爽的一个工具. 什么情况适用这个工具呢? 比如一般你有个微博 ...

  8. salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema Builder查看表结构以及多表之间的关联关系,可以登录后点击setup在左侧搜索框输入schema ...

  9. 开源项目IPProxys的使用

    前几天看了一下github上,IPProxys开源项目(https://github.com/qiyeboy/IPProxys)快100star了,看来大家对这个项目还是比较感兴趣的.最近一直没更新文 ...

  10. 快速入门系列--CLR--01基本概念

    在.NET平台用C#这么久,自然会发现其版本很多,相应的概念也会很多,常常都是萌萌哒.而在实际工作中经常会遇到需要配置dll版本号,公钥token等场景,因而对C#.NET.CLR.框架类型等基础概念 ...