NancyFx 2.0的开源框架的使用-Stateless(二)
继续上一篇Stateless的博文,在上一篇的博文的基础上稍微加点东西

接下来右键解决方案添加新项目,一样建一个空的Web项目



然后在StatelessDemoWeb项目里面添加Views文件夹,Scripts文件夹,并在Views文件夹里面添加index,login,secure三个页面

在index页面添加如下代码
<body>
<div id="loggedIn" style="display:none;"><p>欢迎<span id="username">.</span><a href="#" id="logout">登出</a></p></div>
<h1>非安全页面</h1>
<p><a href="secure.html">安全页面</a></p>
<script type="text/javascript">
$(document).ready(function () {
var apiToken = ApiToken.Get();
if (apiToken.IsValid) {
$("#loggedIn").show();
$("#username").html(apiToken.Username);
$("#logout").click(function () {
var request = { apiKey: apiToken.Key };
var success = function () {
ApiToken.Delete();
window.location = "index.html";
};
$.ajax({
type: 'DELETE',
url: api.auth,
data: request,
success: sucess,
dataType: "json"
});
});
}
});
</script>
</body>

在login页面添加如下代码
<body>
<div>
<input type="text" id="Username" placeholder="登陆名"/><br />
<input type="password" id="Password" placeholder="密码"/><br />
<input id="RememberMe" type="checkbox" value="True"/><br />
<button id="submitButton">登陆</button>
</div>
<div id="errorBox" style="display:none">
无效的用户名和密码
<script type="text/javascript">
$(document).ready(function () {
$("#submitButton").click(function () {
$("#errorBox").hide();
var authRequest = {
username: $("#Username").val(),
password: $("#Password").val(),
rememberMe: $("RememberMe").val()
};
var success = function (response) {
ApiToken.Set(authRequest.username, response.ApiKey, authRequest.rememberMe);
window.location = "index.html";
};
var error = function () {
$("#errorBox").show();
};
$.ajax({
type: 'POST',
url: api.auth,
data: authRequest,
success: success,
error: error,
dataType: "json"
});
});
});
</script>
</div>
</body>

在secure页面添加如下代码
<body style="display:none">
<div>
<a href="index.html"><<主页</a>
<div id="loggedIn" style="display:none">
<p>欢迎<span id="username"></span>.<a href="#" id="logout">登出</a></p>
</div>
<h1>安全页面</h1>
<div>安全内容:<span id="secureContent" class="secure"></span></div>
<div>
<input type="text" id="newusername" placeholder="用户名"/><br />
<input id="newpassword" type="password" placeholder="密码"/><br />
<input type="button" onclick="createUser()"/>
<div id="createuserresult"></div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function () {
//如果 apiKey 存在, 则表示用户已登录
//检查 apiKey 是否存在
var apiToken = ApiToken.Get();
if (apiToken.IsValid) {
//用户已登录
//获取和显示安全内容
//使用我们存储在 cookie 中的 apiKey
var request = { apiKey: apiToken.Key };
//成功视图
var success = function (response) {
$("#username").html(apiToken.Username);
$("#secureContent").html(response.SecureContent);
$("body").show();
};
//将用户重定向到401上的登录页
var error = function (response) {
if (response.status == ) {
window.location = "login.html";
return;
}
alert("出问题了" + response.error);
};
$.ajax({
url: api.secure,
data: request,
success: success,
error: error,
dataType:"json"
});
}
else {
//如果没有保存 apiToken, 则表示用户尚未登录
//将 "em 打包" 发送到登录页
window.location = "login.html";
}
if (apiToken.IsValid) {
$("#loggedIn").show();
$("#username").html(apiToken.Username);
$("#logout").click(function () {
//将 apiKey 发送到要销毁的 api
var request = { apiKey: apiToken.Key };
//当契约在服务器上完成时,
//删除客户端中的 cookie, 然后重定向到主页。
var success = function () {
apiToken.Delete();
window.location = "index.html";
};
$.ajax({
type: 'DELETE',
url: api.auth,
data: resquest,
dataType: "json"
});
});
}
});
function createUser() {
var apiToken = ApiToken.Get();
if (apiToken.IsValid) {
//用户已登录
var request = {
username: $("#newusername").val(),
password: $("#newpassword").val()
};
//成功视图
var success = function (response) {
$("#createuserresult").html("用户" + response.username + "已创建");
};
//将用户重定向到401上的登录页
var error = function (response) {
if (response.status == ) {
window.location = "login.html";
return;
}
alert("出问题了" + response.error);
};
$.ajax({
type: "POST",
url: api.create_user + "?ApiKey=" + apiToken.Key,
data: request,
success: success,
error: error,
dataType:"json"
});
}
else {
//如果没有保存 apiToken, 则表示用户尚未登录
//将 "em 打包" 发送到登录页
window.location = "login.html";
}
}
</script>
</body>

然后在script文件夹添加api.js,apiToken.js两个文件,然后修改api.js文件如下
var api = {
auth: "http://localhost:9611/restApi/auth",
secure: "http://localhost:9611/restApi/secure",
create_user:"http://localhost:9611/resApi/secure/create_user"
};

apiToken.js文件添加如下代码
var apiKeyKey = "sample_apiKey";
var usernameKey = "sample_username"; var ApiToken = {
Set: function (username, apiKey, rememberMe) {
var days = rememberMe ? : ;
createCookie(apiKeyKey, apiKey, days);
createCookie(usernameKey,username,days);
},
Get: function ()
{
var key = readCookie(apiKeyKey);
var username = readCookie(usernameKey);
var token = { Key: key, Username: username, IsValid: key != null };
return token;
},
Delete: function ()
{
eraseCookie(apiKeyKey);
eraseCookie(usernameKey);
}
};
function createCookie(name,value,days)
{
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days * * * ));
var expires = ";expires=" + date.toGMTString();
} else {
var expires = "";
document.cookie = name + "=" + value + expires + ";path=/";
console.log(document.cookie);
}
}
function readCookie(name) {
var cookieValue = null;
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for (var i = ; i < ca.length; i++) {
var c = cap[i];
while (c.charAt() == ' ') {
c = c.substring(, c.length);
}
if (c.indexOf(nameEQ) == ) {
var found = c.substring(nameEQ.length, c.length);
cookieValue = found;
}
}
return cookieValue;
}
function eraseCookie(name) {
createCookie(name,"",-);
}

运行如下

谢谢观赏
NancyFx 2.0的开源框架的使用-Stateless(二)的更多相关文章
- NancyFx 2.0的开源框架的使用-Stateless
同样和前面一样新建一个空的Web项目,都在根目录添加Module,Models,Views文件夹 添加Nuget包 在Models文件夹里面添加UserModel类 public string Use ...
- NancyFx 2.0的开源框架的使用-Basic
这是NancyFx开源框架中的Basic认证,学习一下! 首先当然是新建一个空的Web,BasicDemo 继续在项目中添加Nuget包,记得安装的Nuget包是最新的预发行版 Nancy Nancy ...
- NancyFx 2.0的开源框架的使用-CustomModule(自定义模块)
NancyFx框架的自定义模块 新建一个空的Web项目 然后通过NuGet库安装下面的包 Nancy Nancy.Hosting.Aspnet 然后添加Models,Module,Views三个文件夹 ...
- NancyFx 2.0的开源框架的使用-ModelBinding(实现绑定)
NancyFx框架中使用绑定模型 新建一个空的Web程序 然后安装Nuget库里面的包 Nancy Nancy.Hosting.Aspnet Nancy.ViewEnglines.Spark 并在We ...
- NancyFx 2.0的开源框架的使用-HosingOwin
Nancy框架的Owin使用 先建一个空的Web项目 然后往Nuget库里面添加Nancy包 Nancy Nancy.Owin Nancy.ViewEnglines.Spark 然后添加Models, ...
- NancyFx 2.0的开源框架的使用-Authentication
新建一个空的项目 新建好了空的项目以后,接着通过NuGet安装一下三个包 Nancy Nancy.Hosting.Aspnet Nancy.ViewEnglines.Razor 然后在项目中添加Mod ...
- NancyFx 2.0的开源框架的使用-Forms
同样的像前面2篇博文一样,每个项目的开始基本都是建个空的Web项目 在NuGet库中安装以下几个NuGet包 Nancy Nancy.Authentication.Forms Nancy.Hostin ...
- NancyFx 2.0的开源框架的使用-AspnetBootstrapping
新建一个空的Web项目AspnetBootstrappingDemo 然后添加NuGet组件 Nancy Nancy.Hosting.Aspnet Nancy.ViewEngines.Razor 继续 ...
- NancyFx 2.0的开源框架的使用-Caching
新建一个空的Web项目,命名CachingDemo 然后添加三个Nuget安装包 Nancy Nancy.Hosting.Aspnet Nancy.ViewsEngines.Razor 然后往项目里面 ...
随机推荐
- 转:Java中finally和return的执行关系
finally可以分两方面理解 1.执行时机问题.finally总会执行(除非是System.exit()),正常情况下在try后执行,抛异常时在catche后面执行 2.返回值问题.可以认为try( ...
- 抛弃vue-resource拥抱axios
vue-resource用法 import Vue from 'vue' import VueResource from 'vue-resource' Vue.use(VueResource) 是不是 ...
- 想系统的学习一下项目管理,推荐PRINCE2
参加pmp培训,考个pmp证书就足矣应付面试. 个人并不推荐看那些外文原版书籍,我看过一两本,水平与实用性并不是你想象的那么好,除非你是做理论研究,为了发表论文. 另一本就推荐prince2的教材,p ...
- centos5.11架设svn(svn系列 架设服务器 知识一总结)
♣svn是什么? ♣安装 --yum安装 --创建svn版本库目录 --创建版本库 --进入conf目录进行配置(该svn版本库配置文件) --启动svn版本库 - ...
- 老李分享:loadrunner操作mysql数据库
老李分享:loadrunner操作mysql数据库 在poptest测试开发工程师就业培训的课程中,针对一套商业系统进行性能测试,目标是mysql后台数据库的负载能力,在这里我把测试代码 ...
- Ant Design 的一个练习小Demo
Ant Design 由蚂蚁金服团队出品, 基于 React 的组件化开发模式,封装了一套丰富而实用的 UI 组件库. 在这个练习Demo 中,按照 Ant Design 官网的教程示例,尝试使用 A ...
- python os模块常用方法
OS模块是Python标准库中的一个操作模块,主要用于处理Linux操作系统中的文件和目录 1.要使用OS必须先导入OS import os 2.os.getcwd()获取当前路径. print os ...
- 第六章 Hibernate关联映射
第六章 hibernate关联映射一.本章知识点分为2部分:1.关联关系:单向多对一关联关系,双向一对多关联关系(含一对多关联关系),多对多关联关系2.延迟加载:类级别加载策略,一对多加载策略,多对一 ...
- SQL基础函数
首先咱们一起来看一下SQL的基本函数 一.聚合函数 二.数学函数 三.字符串函数 四.转换函数 五.时间函数 这样子看起来可能很多,那咱们给变得---------------------------- ...
- Asp.net Authorization 学习
其实使用新的Identity以来一直有一个疑惑,之前的角色管理 在新的Identity中怎么管理的.[AspNetUserClaims] 在新的授权管理中又占什么位置 第一,根据角色授权,刚刚注册的用 ...