起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7652|回复: 6

[分享] 登录功能实现

  [复制链接]

65

主题

315

帖子

851

积分

高级会员

Rank: 4

积分
851
发表于 2017-11-17 20:04:32 | 显示全部楼层 |阅读模式
本帖最后由 我是小菜鸡 于 2017-11-17 20:07 编辑

痛苦了很久的登录、注销登录功能终于解决了,期间从论坛里看了很多帖子,也发过贴寻求大神帮助,无奈没有获得具体的方法,后来从网上一位大神的博客里找到了解决问题的关键点:http://www.cnblogs.com/fangziffff123/p/6222920.html
下面将我的实现过程分享出来,希望以后像我一样的小白少走点弯路,也希望各位致力于WeX5开发的同鞋以后有好的方法可以分享出来,有空的时候到论坛里回答一些力所能及的问题;多想想自己在最开始学习的时候别人是怎么帮助我们的,自己有能力了也要多帮助后来的人。只有大家共同促进,WeX5才能够良好的发展,不断进步,这样对我们所有使用WeX5或者想要学习WeX5的人都有好处。

实现思路是WeX5提供的思路:http://docs.wex5.com/wex5-ui-question-list-2143/
注:最好将物理返回键的操作方式改成关闭页面 http://docs.wex5.com/wex5-app-question-list-2003/
1. 主页
在index中通过justep.Shell.showPage('main')打开主页,如果已经登录过不再重新登陆,否则通过windowDialog打开登陆对话框。我要做的功能是根据不同用户身份打开不同的页面,所以在main页中放了一个windowContainer。 1510916226(1).jpg

  1. define(function(require) {
  2.         var $ = require("jquery");
  3.         var justep = require("$UI/system/lib/justep");
  4.         var MD5 = require("$UI/system/lib/base/md5");

  5.         var Model = function() {
  6.                 this.callParent();
  7.                 this.md5 = new MD5();
  8.         };

  9.         Model.prototype.modelParamsReceive = function(event) {
  10.                 // 注销登录弹出登录对话框
  11.                 if (this.params.operation == "reload") {
  12.                         this.comp("loginDialog").open();
  13.                         return;
  14.                 }
复制代码
为了避面在登陆时没有选择记住密码(即localstorage中没有用户数据),在重新返回main页面时可能会再次弹出登陆窗口,可以添加justep.Shell.login参数,登陆成功后给它赋一个值true,modelParamsReceive事件中判断一下justep.Shell.login的值,如果已经登录就不必再加载页面。

2. 登陆
登陆页面逻辑就是根据用户输入账号信息在数据库中进行匹配,如果能匹配说明账号信息正确,返回到main页面,同时将用户信息传到main页面,main页面根据用户信息加载不同的页面。注册页面在登陆页通过windowDialog打开。

1510917644(1).jpg

  1. define(function(require) {
  2.     var $ = require("jquery");
  3.     var justep = require("$UI/system/lib/justep");
  4.     var MD5 = require("$UI/system/lib/base/md5");
  5.     var ILayer = require("./ILayer");

  6.     var Model = function() {
  7.         this.callParent();
  8.         this.md5 = new MD5();
  9.     };
  10.     // 登录
  11.     Model.prototype.loginBtnClick = function(event) {
  12.         var Data = this.comp("userData");
  13.         var phone = $.trim(this.comp("phoneInput").val());
  14.         var password = $.trim(this.comp("passwordInput").val());
  15.         // 用户密码为空提示
  16.         if (phone === "") {
  17.             ILayer.ShowWarnMsg('请输入用户名');
  18.             return;
  19.         }
  20.         if (password === "") {
  21.             ILayer.ShowWarnMsg('请输入密码');
  22.             return;
  23.         }
  24.         Data.setFilter("filter", "phone='" + phone + "' AND password='"
  25.                 + this.md5.hex_md5(password) + "'");
  26.         Data.refreshData();
  27.         if (Data.count() > 0) {
  28.             // 全局变量
  29.             var row = Data.getFirstRow();
  30.             var userID = row.val('ID');
  31.             var role = row.val('role');
  32.             // 本地记住用户名密码
  33.             var userUUID = {};
  34.             userUUID.phone = phone;
  35.             userUUID.password = password;
  36.             if (this.comp("toggle1").val()) {
  37.                 localStorage.setItem("userUUID", JSON.stringify(userUUID));
  38.             } else {
  39.                 localStorage.removeItem('userUUID');
  40.             }
  41.             justep.Shell.userID.set(userID);
  42.             justep.Shell.userRole.set(role);

  43.             ILayer.ShowMsg('登录成功');
  44.             this.owner.send(userUUID);
  45.             window.timeout = setTimeout(onTimeout, 3000);
  46.         } else {
  47.             ILayer.ShowWarnMsg('账号或密码输入错误');
  48.             localStorage.removeItem('userUUID');
  49.         }
  50.         var self = this;
  51.         function onTimeout() {
  52.             self.close();
  53.         }
  54.     };
  55.     // 页面加载
  56.     Model.prototype.modelLoad = function(event) {
  57.         var userLocal = (localStorage.getItem("userUUID") && JSON.parse(localStorage
  58.                 .getItem("userUUID")))
  59.                 || null;
  60.         if (userLocal) {
  61.             if (userLocal.phone)
  62.                 this.comp("phoneInput").set({
  63.                     value : userLocal.phone
  64.                 });
  65.             if (userLocal.password)
  66.                 this.comp("passwordInput").set({
  67.                     value : userLocal.password
  68.                 });
  69.             this.comp("toggle1").set({
  70.                 value : true
  71.             });
  72.         }
  73.     };
  74.     // 跳转到注册页面
  75.     Model.prototype.registerBtnClick = function(event) {
  76.         this.comp("registerDialog").open();
  77.     };
  78.     // 跳转到忘记密码界面
  79.     Model.prototype.forgetBtnClick = function(event) {
  80.         this.comp("forgetPWDialog").open();
  81.     };

  82.     return Model;
  83. });
复制代码

3. 个人信息页

想要根据用户登陆信息改变页面数据的一个重要操作就是添加modelParamsReceive事件,重新打开一个页面的时候,可能不会触发modelLoad事件,但是一定会触发modelParamsReceive事件,在modelParamsReceive事件中根据用户登陆信息对页面数据进行过滤即可。
注销重新登陆是重新返回到main页面再弹出登陆对话框,只需要让main页面接收到重新登陆这个操作即可,可以向main页面传一个参数,也可以将localstorage中的用户信息删除。

1510918653(1).png

  1. define(function(require) {
  2.     var $ = require("jquery");
  3.     var justep = require("$UI/system/lib/justep");

  4.     var Model = function() {
  5.         this.callParent();
  6.     };

  7.     // 跳转到编辑信息界面
  8.     Model.prototype.EditInfoClick = function(event) {
  9.         justep.Shell.showPage("EditInfo");
  10.     };

  11.     // 点击修改密码后弹出窗口输入旧密码。
  12.     Model.prototype.editPwBtnClick = function(event) {
  13.         justep.Shell.showPage("resetPW", {
  14.             'type' : 'reset'
  15.         });
  16.     };

  17.     // 点击"关于"按钮后弹窗
  18.     Model.prototype.aboutBtnClick = function(event) {
  19.         this.comp("about").show();
  20.     };

  21.     // 点击“帮助与反馈”后弹窗
  22.     Model.prototype.helpBtnClick = function(event) {
  23.         this.comp("help").show();
  24.     };

  25.     Model.prototype.modelLoad = function(event) {
  26.         this.comp("userData").setFilter("filter1", "ID='" + justep.Shell.userID.latestValue + "'");
  27.         this.comp("userData").refreshData();
  28.     };

  29.     Model.prototype.modelParamsReceive = function(event) {
  30.         this.comp("userData").setFilter("filter1", "ID='" + justep.Shell.userID.latestValue + "'");
  31.         this.comp("userData").refreshData();
  32.     };
  33.     //退出登录
  34.     Model.prototype.logoutBtnClick = function(event){
  35.         justep.Shell.showMainPage({"operation":"reload"});
  36.     };

  37.     return Model;
  38. });
复制代码

如果有错误欢迎大家指正~
有问题可以联系我:QQ:654935984


65

主题

315

帖子

851

积分

高级会员

Rank: 4

积分
851
 楼主| 发表于 2017-11-29 10:11:45 | 显示全部楼层
doudou459 发表于 2017-11-28 13:02
this.comp("userData").setFilter("filter1", "");
可以将你的filter 清空     
data做登录等操作不安全· ...

谢谢~就是数据库访问后台服务完全自己写吗?还是说登录的时候只要将登录信息发送到后台服务器,在服务器上判断登录信息是否正确?
这一块不是非常清楚~
回复 支持 1 反对 0

使用道具 举报

59

主题

274

帖子

1178

积分

金牌会员

Rank: 6Rank: 6

积分
1178
QQ
发表于 2017-11-18 11:20:54 | 显示全部楼层
给你补充点吧,在任何通过页面映射打开的页面,都可以用
  1. //自定义的弹窗
  2. this.getParent().comp('returnloginDialog').show();
  3. //windowDialog
  4. this.getParent().comp('windowDialog').show();
  5. 这种方式打开在index页面的弹窗,这就意味,在所有页面,当需要的时候,都可以让用户登录
复制代码
回复 支持 反对

使用道具 举报

53

主题

928

帖子

1730

积分

金牌会员

Rank: 6Rank: 6

积分
1730
发表于 2017-11-28 13:02:20 | 显示全部楼层
this.comp("userData").setFilter("filter1", "");
可以将你的filter 清空     
data做登录等操作不安全····不建议直接使用wex5的后台     
建议自己做后台  
不然一个稍微懂一点JS的人都可以黑了你的网站   
承接wex5开发web项目、微信页面等;
低费用进行零散功能开发(java、JS、微信各种接口、阿里云接口等)
QQ:459349489
回复 支持 反对

使用道具 举报

65

主题

315

帖子

851

积分

高级会员

Rank: 4

积分
851
 楼主| 发表于 2017-11-29 10:05:07 | 显示全部楼层
wangjikuen 发表于 2017-11-18 11:20
给你补充点吧,在任何通过页面映射打开的页面,都可以用

不太理解~this.getParent()是指index页面吗?然后在index页面中添加弹窗windowDialog绑定登录页面?
回复 支持 反对

使用道具 举报

59

主题

274

帖子

1178

积分

金牌会员

Rank: 6Rank: 6

积分
1178
QQ
发表于 2017-11-29 13:38:32 | 显示全部楼层
我是小菜鸡 发表于 2017-11-29 10:05
不太理解~this.getParent()是指index页面吗?然后在index页面中添加弹窗windowDialog绑定登录页面? ...

父级页面
回复 支持 反对

使用道具 举报

41

主题

837

帖子

2271

积分

金牌会员

搬砖工

Rank: 6Rank: 6

积分
2271
QQ
发表于 2017-11-29 13:53:32 | 显示全部楼层
不错 还做了忘记密码   顶一个
Wex5开发者,欢迎互相交流学习
交流群:30057529


我要成为代码女神
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-4-26 18:02 , Processed in 0.081748 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表