从Auth对象看前端:1、将与Auth对象相关的功能分离出来。所含的内容包括:【个人中心相关信息的显示,注册,登录,忘记密码,修改密码,个人信息修改】。

2、从“我的”页面开始,显示使用哪儿的数据,需要获取数据。(服务端拉取or本地存储,如果是本地储存,起仍然是服务端的数据,那么便需要在登录的时候将数据储存起来【setUserInfo(userData)】,使用“UserInfo”字段)提取显示数据使用【getUserInfo(callback,errorback)】

3、点击“退出登录”,需要清空“UserInfo”,并且刷新页面为未登录状态,使用【logOut()】。

4、点击“注册”,需要发送验证码【sendCode(phone,callback)】,填写完毕后,【signUp(phone,code,pass,callback)】调用接口向后发服务器发起注册,status==200,让它自己登录【signIn(phone,pass,callback)】,登录成功后,将返回的数据储存【setUserInfo(userdata)】,注册并登录成功后,自动返回,调用【getUserInfo(callback,errorback)】显示个人信息。

5、点击登录【signIn(phone,pass,callback)】,重复注册后半部分的步骤。

 
6、点击“忘记密码”,首先进入stepOne.html,填写手机号后,发送验证码【sendCode(phone)】,填写完验证码,点击下一步【forgetPassVerify(phone,code,callback,errorback)】验证验证码是否正确,成功后执行callback进入下一步,失败后,执行errorback。第二步中,填入新密码,调用【forgetPassReset(phone,newPass,callback)】,修改成功后,【logOut()】,并关闭页面。

7、从账户安全进入的“修改密码”,步骤与上述一致。

8、“个人信息”修改,进入页面,编辑完信息后,【userEdit(userInfo,nickname,avatar,slogan,password,gender,real_name)】更新信息,更新成功后,【updateUserInfo(userdata)】

 

注:

①callback函数中的内容,主要也看复用性,如果需复用程度大,直接写在对象中,供每个函数调用,如果复用程度低,便使用callback代替,函数在被调用时,如果需要callback,才写入callback。

②callback和errorback的作用,可以分别放在if…else 语句中,在不同的情况下调用。

③在写每一步的时候,都需要考虑该步骤对其他地方是否有影响,进而进行相关的处理。

④在哪些情况下需要sendCode?修改密码的两种情况,注册的情况。

⑤在哪些情况下需要setUserInfo(userData)?在注册成功后登录,单独的登录。

⑥在哪些情况下需要updateUserInfo(userData)?修改了个人资料。

⑦updateUserInfo和setUserInfo中参数:updateUserInfo中的rs是后台返回,没有token信息,在储存的时候需要整理一下,setUserInfo中的,是登录时返回的rs,含有token,直接setData即可。
 
 
auth_operation.js
 
var Auth = {};
$(function() {
var myhost = "http://fresh.ieyuan.com:8021/api";
bridge.connectBridge(function() {
Auth.SetUserInfo = function(userData) {
console.log(userData);
userData = JSON.stringify(userData);
console.log(userData);
bridge.setData("UserInfo", userData);
};
/**
* 更新用户信息
* @param {Object} userData
*/
Auth.UpDateUserInfo = function(userData) {
if(typeof userData == "string") {
userData = JSON.parse(userData);
}
Auth.GetUserInfo(function(info) {
for(var key in info) {
if(userData[key]) {
info[key] = userData[key];
}
}
console.log(info);
console.log(userData);
info = JSON.stringify(info);
bridge.setData("UserInfo", info);
//修改
bridge.dataUpdated();
})
};
/**
*
* @param {Object} callback存在用户信息则调用
* @param {Object} errorback不存在用户信息调用
*/
Auth.GetUserInfo = function(callback, errorback) {
bridge.getData("UserInfo", function(info) {
if(Utils.isEmpty(info)) {
if(errorback) {
errorback("未知登录信息!")
};
} else {
info = JSON.parse(info);
console.log(info);
Auth.UserInfo = info;
var _id = info.id;
if(callback) {
callback(info)
};
}
});
};
Auth.LogOut = function() {
console.log("logOut")
bridge.setData("UserInfo", null);
// bridge.dataUpdated();
};
/**
*
* @param {Object} phone
* @param {Object} code
* @param {Object} pass
* @param {Object} callback获取成功后执行,并传入用户信息
*/
Auth.SignUp = function(phone, code, pass, callback) {
if($.trim(code) == "") {
bridge.showToast("请填写验证码!");
return;
}
if($.trim(phone) == "" || $.trim(pass) == "") {
bridge.showToast("账号或密码格式错误!");
return;
}
bridge.rest.post({
url: myhost + "/signup",
data: {
"phone": phone,
"code": code,
"password": pass
}
}, function(res) {
if(res.status == 200) {
var result;
Auth.SignIn(phone,pass, function(res) {
console.log(res.data);
result=res.data;
bridge.dataUpdated(function(data) {
bridge.finishActivity();
});
});
if(callback) callback(result);
} else {
if(res.data.error_code) {
bridge.showToast(res.data.msg);
} else {
bridge.showToast("注册失败!");
}
}
})
};
/**
*
* @param {Object} phone
* @param {Object} pass
* @param {Object} callback登录成功调用,并出入用户信息
*/
Auth.SignIn = function(phone, pass, callback) {
if(!phone || !pass) {
bridge.showToast("请填写完整的信息!");
return;
}
bridge.rest.get({
url: myhost + "/signin/phone/" + phone + "/password/" + pass
}, function(res) {
console.log(res);
if(res.status == 200) {
Auth.UserInfo = res.data;
Auth.SetUserInfo(res.data);
bridge.showToast("登录成功!");
if(callback) callback(res.data);
} else {
bridge.showToast(res.data.msg);
}
})
};
/**
*
* @param {Object} phone用户电话
* @param {Object} callback发送成功后调用
*/
Auth.SendCode = function(phone, callback) {
if($.trim(phone) == "") {
bridge.showToast("请填写手机号!");
return;
}
console.log(phone)
bridge.rest.get({
url: myhost + "/signin/code/" + phone + "?sms_flag=1215"
}, function(res) {
alert(res.data.code)
if(res.status == 200) {
bridge.showToast("发送成功!");
if(callback) callback(res.data.code);
} else {
if(res.data.error_code) {
bridge.showToast(res.data.msg);
} else {
bridge.showToast("发送验证码失败!");
}
}
})
};
/**
*
* @param {Object} phone电话号码
* @param {Object} code需要验证的电话号
* @param {Object} callback
*/
Auth.ForgetPassVerify = function(phone, code, callback, errorcall) {
if($.trim(code) == "") {
bridge.showToast("请填写验证码!");
return;
}
if($.trim(phone) == "") {
bridge.showToast("账号格式错误!");
return;
}
bridge.rest.get({
url: myhost + "/phone/" + phone + "/code/" + code + "/check"
}, function(res) {
if(res.status == 200) {
if(callback) callback(res.data);
} else {
if(res.data.error_code) {
bridge.showToast(res.data.msg);
} else {
bridge.showToast("验证错误!");
}
errorcall ? errorcall() : "";
}
})
};
Auth.ForgetPassReset = function(phone, newPass, callback) {
if($.trim(newPass) == "") {
bridge.showToast("请填写新密码!");
return;
}
bridge.rest.put({
url: myhost + "/forget-passwd/phone/" + phone,
data: {
"password": newPass
}
}, function(res) {
if(res.status == 200) {
bridge.showToast("重置成功!");
Auth.LogOut();
if(callback) callback(res.data);
// var result;
// Auth.SignIn(phone,newPass, function(res) {
// console.log(res.data);
// result=res.data;
// bridge.dataUpdated(function(data) {
// bridge.finishActivity();
// });
// });
// if(callback) callback(result);
} else {
if(res.data.error_code) {
bridge.showToast(res.data.msg);
} else {
bridge.showToast("重置密码失败!");
}
}
})
};
/**
*
* @param {Object} UID
* @param {Object} nickname
* @param {Object} avatar
* @param {Object} slogan
* @param {Object} password
* @param {Object} gender
* @param {Object} real_name
*/
Auth.UserEdit = function(UserInfo, nickname, avatar, slogan, password, gender, real_name) {
if(Utils.isEmpty(UserInfo)) {
bridge.showToast("信息缺失,请重新登录!");
return;
}
bridge.showProgressDialog("正在修改");
console.log(UserInfo.id);
console.log(UserInfo.token)
console.log(avatar);
bridge.rest.put({
url: myhost + "/user/" + UserInfo.id,
headers: {
"token": UserInfo.token
},
data: {
"nickname": nickname ? nickname : "",
"avatar": avatar ? avatar : "",
"gender": gender ? gender : "",
"slogan": slogan ? slogan : "",
"password": password ? password : "",
"real_name": real_name ? real_name : ""
}
}, function(res) {
console.log(res)
// res = JSON.parse(res);
if(res.status == 200) {
Auth.UpDateUserInfo(res.data);
bridge.showSuccessMsg("修改成功!");
console.log("修改成功!");
$(".save_changes").addClass("locked");
// bridge.showToast("修改成功!");
} else {
if(res.data.error_code) {
bridge.showToast(res.data.msg);
} else {
bridge.showToast("修改失败!");
}
}
})
};
})
})
 

智慧城市的【Auth】登录对象的更多相关文章

  1. VR全景智慧城市:360全景市场需要背景及其优势~

    VR元年已过,VR项目.VR创业潮转为理性,VR行业分为两个方向:硬件和内容. VR全景,又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体大的区别是"可操作,可交 ...

  2. RFID电动车管理,智慧城市物联网建设的入口

    原谷歌CEO施密特说:"我可以非常直接地说,互联网将消失." 互联网在20多年来帮助人们解决了信息共享.交互,几乎在瞬间颠覆了很多传统的商业模式,把卖产品变为卖内容和服务,是个了不 ...

  3. Django之auth登录认证

    前言:我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的 ...

  4. [转]新型智慧城市总体架构 华为 新ICT 一云二网三平台

    本文转自:http://www.jpsycn.com/hangyexinwen/20160801142354.html “十三五”规划提出,充分运用现代信息技术和大数据,建设一批新型示范性智慧城市.日 ...

  5. VR全景智慧城市-720全景项目行业应用

    VR虚拟现实.VR全景概念已成为科技发展热议的焦点.在这样的市场大环境下,全景智慧城市做为一家对大众创新万众创业和用户体验为理念的VR全景城市化信息搜素平台平地而生成为的VR行业领跑者,致力VR全景V ...

  6. 阿里与腾讯“智慧城市”的O2O谁更强?(分享)

    成都亿合科技:本月22日蚂蚁金服联合新浪微博宣布“智慧城市”战略,用户可通过新浪微博.手机淘宝.支付宝三大客户端完成医疗.市政缴费以及相关信息查询工作,首批入驻城市有上海.太原.深圳.青岛等12个城市 ...

  7. 零售业山重水复,全景行柳暗花明——VR全景智慧城市

    对今天的中国来说,寻找经济转型的突破口,寻找经济权力的新霸主,零售业应该当仁不让. 零售业正在经历一场脱胎换骨的改造.一方面零售额达到前所未有的水平,另一方面,传统零售商也面临诸多挑战,其中之一,便是 ...

  8. 电商的噩梦?实体商家的福音——VR全景智慧城市

    我们不知道未来网络购物的样子,但对当前电商平台的问题是清楚的.从消费者角度来看,网购的顾虑主要在于商品的质量难以保证.物流效率不够高,以及网络购物的"眼见不为实". 正因为可以很好 ...

  9. VR全景智慧城市——“海市蜃楼”般的逛街体验

    <史记·天官书>:"海旁蜃气像楼台:广野气成宫阙然." 海市蜃楼,简称蜃景,是一种因为光的折射和全反射而形成的自然现象,是地球上物体反射的光经大气折射而形成的虚像. 2 ...

  10. 全景智慧城市——NOW!!!VRSHOPPING颠覆你的购物认知!

    互联网+时代,人们对现有的网络资源已经不再感冒,一般的图片.文字信息已经无法满足人们对互联网的需求,虚拟现实.身临其境的体验是不可小觑的发展趋势,尤其是VR逛街.购物,更会深入人心,再次改变人们的生活 ...

随机推荐

  1. [系统开发] 基于Ansible的产品上线系统

    前言: 应部门急需,开发了一套基于Ansible Playbook的产品上线系统.由于时间很紧,UI直接套用了之前开发的一套perl cgi模板,后续计划用 django 重新编写. 个人感觉该系统的 ...

  2. php类中常量的定义

    先看下面一段代码: class SVN { const DEFAULT_PATH = "/tmp"; const SVNLOOK_CMD = "/usr/bin/svnl ...

  3. RMQ训练题 codevs 1291 火车线路 已经搞定

    就是线段树维护区间的最小值 但是要注意 本题坑人的地方 是   a到b站  实际上是维护a到b-1  因为b站已经下车了 我勒个去呀 #include<iostream> #include ...

  4. Hyper-v之利用差异磁盘快速创建多个虚拟机

    在新建Hyper-v磁盘的时候 有3种选项 其中分别是 固定大小 动态扩展 和 差异(differencing,个人习惯叫 差分) 其中 固定大小是新建的时候 Hyper-v创建一个设置大小值的文件, ...

  5. LAMP_03_Win下Apache+PHP+MySQL整合

    文件: Apache :  首先修改Apache的配置文件,让Apache支持解析PHP文件.Apache配置文件在Apache安装目录的conf目录下的httpd.conf.1. 让Apache可以 ...

  6. Gold Game

    一.项目描述:黄金点游戏 黄金点游戏是一个数字小游戏,其游戏规则是: N个同学(N通常大于10),每人写一个0-100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0 ...

  7. Hive On Spark概述

    Hive现有支持的执行引擎有mr和tez,默认的执行引擎是mr,Hive On Spark的目的是添加一个spark的执行引擎,让hive能跑在spark之上: 在执行hive ql脚本之前指定执行引 ...

  8. PowerDesigner设计时表显示注释选项

    PowerDesigner设计时表显示注释选项:选定编辑的表,右键- >Properties- >Columns- >Customize Columns and Filter(或直接 ...

  9. 关于Windows 7启动后网络一直转的问题的一个解决方法

    前两天给自己的X220i换了个SSD,装了个windows 7 的系统,然后自然搞了一些杀毒软件之类的,为了开发需要还装了Oracle数据库,可是,不知道从什么时候开始,系统启动后右下角那个网络图标显 ...

  10. Android工作学习第5天之Activity的完全退出程序

    注:本文大部分为网上转载,本人只是根据工作的需要略做整合! android 完全退出应用程序 注意:1.单例模式的学习 2.Manifest.xml,注意项目清单文件中要加上 android退出应用程 ...