智慧城市的【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)】,重复注册后半部分的步骤。
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)?修改了个人资料。
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】登录对象的更多相关文章
- VR全景智慧城市:360全景市场需要背景及其优势~
VR元年已过,VR项目.VR创业潮转为理性,VR行业分为两个方向:硬件和内容. VR全景,又被称为3D实景,是一种新兴的富媒体技术,其与视频,声音,图片等传统的流媒体大的区别是"可操作,可交 ...
- RFID电动车管理,智慧城市物联网建设的入口
原谷歌CEO施密特说:"我可以非常直接地说,互联网将消失." 互联网在20多年来帮助人们解决了信息共享.交互,几乎在瞬间颠覆了很多传统的商业模式,把卖产品变为卖内容和服务,是个了不 ...
- Django之auth登录认证
前言:我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的 ...
- [转]新型智慧城市总体架构 华为 新ICT 一云二网三平台
本文转自:http://www.jpsycn.com/hangyexinwen/20160801142354.html “十三五”规划提出,充分运用现代信息技术和大数据,建设一批新型示范性智慧城市.日 ...
- VR全景智慧城市-720全景项目行业应用
VR虚拟现实.VR全景概念已成为科技发展热议的焦点.在这样的市场大环境下,全景智慧城市做为一家对大众创新万众创业和用户体验为理念的VR全景城市化信息搜素平台平地而生成为的VR行业领跑者,致力VR全景V ...
- 阿里与腾讯“智慧城市”的O2O谁更强?(分享)
成都亿合科技:本月22日蚂蚁金服联合新浪微博宣布“智慧城市”战略,用户可通过新浪微博.手机淘宝.支付宝三大客户端完成医疗.市政缴费以及相关信息查询工作,首批入驻城市有上海.太原.深圳.青岛等12个城市 ...
- 零售业山重水复,全景行柳暗花明——VR全景智慧城市
对今天的中国来说,寻找经济转型的突破口,寻找经济权力的新霸主,零售业应该当仁不让. 零售业正在经历一场脱胎换骨的改造.一方面零售额达到前所未有的水平,另一方面,传统零售商也面临诸多挑战,其中之一,便是 ...
- 电商的噩梦?实体商家的福音——VR全景智慧城市
我们不知道未来网络购物的样子,但对当前电商平台的问题是清楚的.从消费者角度来看,网购的顾虑主要在于商品的质量难以保证.物流效率不够高,以及网络购物的"眼见不为实". 正因为可以很好 ...
- VR全景智慧城市——“海市蜃楼”般的逛街体验
<史记·天官书>:"海旁蜃气像楼台:广野气成宫阙然." 海市蜃楼,简称蜃景,是一种因为光的折射和全反射而形成的自然现象,是地球上物体反射的光经大气折射而形成的虚像. 2 ...
- 全景智慧城市——NOW!!!VRSHOPPING颠覆你的购物认知!
互联网+时代,人们对现有的网络资源已经不再感冒,一般的图片.文字信息已经无法满足人们对互联网的需求,虚拟现实.身临其境的体验是不可小觑的发展趋势,尤其是VR逛街.购物,更会深入人心,再次改变人们的生活 ...
随机推荐
- <<Vector Calculus>>笔记
现在流行用Exterior Caculus, 所以个人觉得Matthews这本书有点过时了. 想学Vector Calculus的话,推荐<Vector Calculus, Linear Alg ...
- Dual Number
http://ncatlab.org/nlab/show/dual+number http://mathworld.wolfram.com/DualNumber.html https://en.wik ...
- xcode中使用xib添加autolayout中constrain to margins的不同
在使用xcode7 在storyboard中添加autolayout中发现 如果添加在view 直接添加到viewcontroller的view 上 constrain to margins 只 ...
- 如何使用一个对象而非数组元素为ng-options初始化
a,是引用,而b是一个和a内容相同的另一个对象, 因此不能通过b直接赋值.如果要这样用,就用 track by xxx.id ,它的作用是通过id(唯一的)去ng-options做一次检索匹配
- C#开发分享:如何改变系统鼠标样式
开发过程中发现需要用到改变鼠标样式(就是光标的样子),但是在网上找了很多资料,都是介绍在程序中使用,我需要的效果时在系统级使用.现在找到了,分享给大家. [DllImport("user32 ...
- 为什么在ucos向stm32f103移植时说os_cpu_c.c中有三个函数如OS_CPU_SysTickInit()需要注释掉
我在看os_cpu_c.c代码时对下面这段话困惑了半天总是在百度的帮助下找到了答案 /* 申明几个函数,这里要注意最后三个函数需要注释掉,为什么呢? OS_CPU_SysTickHandler ...
- caffe-mnist别手写数字
[来自:http://www.cnblogs.com/denny402/p/5685909.html] 整个工作目录建在:/home/ubunt16041/caffe/examples/abc_mni ...
- java安全沙箱(二)之.class文件检验器
java是一种类型安全的语言,它有四类称为安全沙箱机制的安全机制来保证语言的安全性,这四类安全沙箱分别是: 类加载体系 .class文件检验器 内置于Java虚拟机(及语言)的安全特性 安全管理器及J ...
- npm命令ionic安装失败cordova安装失败解决方法
转载:http://bbs.phonegap100.com/thread-2622-1-1.html 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): ...
- 深入理解Oracle的并行操作-转载
转载:http://czmmiao.iteye.com/blog/1487568 并行(Parallel)和OLAP系统 并行的实现机制是:首先,Oracle会创建一个进程用于协调并行服务进程之间的信 ...