1、apiclou实现页面的登录方式,不适用自带的登录。

html代码

<div class="login_ipt_box">
<img class="login_pic_ipt" src="../../image/userName.png" />
<input class="ipt_login" name="userName" value="" id="userName"
placeholder="请输入账户名"/>
</div>
<div class="login_ipt_box">
<img class="login_pic_ipt" src="../../image/password.png" />
<input class="ipt_login" name="userPassword" type="password" value="" placeholder="请输入密码" id="password"/>
</div>
<input type="button" class="btn_login" onclick="loginIn()" value="登录" />

js方面

function loginIn(){
var userName = $api.val($api.byId('userName')),
password = $api.val($api.byId('password'));
if (!$api.trim(userName)) {
api.toast({
msg: '请输入账号',
duration: ,
location: 'middle'
});
return;
}
if (!$api.trim(password)) {
api.toast({
msg: '请输入密码',
duration: ,
location: 'middle'
});
return;
} /*** 加载动画 ***/
api.showProgress({
title : ' ',
text : '玩命加载中...',
modal : true
}); api.ajax({
url: 'https://api.yazhuaa/?serAdmin.Login&username='+ userName +'&password='+ password,
timeout: ,
dataType: 'json',
method: 'post'
}, function(ret, err) {
api.hideProgress();
if(ret.data.result == false){
api.toast({
  msg: '登录失败',
  duration: ,
  location: 'middle'
   });
     }else{
if (ret.data.result.user_name) $api.setStorage('userName', ret.data.result.user_name);
if (ret.data.result.id) $api.setStorage('id', ret.data.result.id);
if (ret.data.result.member_id) $api.setStorage('member_id', ret.data.result.member_id);
if (ret.data.sessionid) $api.setStorage('PHPSESSID', ret.data.sessionid); api.toast({
      msg:'登录成功',
      duration: '',
      localtion: 'middle'
      });
$api.setStorage('isLogin', true);
// api.sendEvent({
// name: 'UserHasLogin'
// });
setTimeout(function() {
api.openWin({
    name: 'index',
     url: '../../index.html',
    bounces: false,
     animation:{
    type: "push",
    duration:
    }
    });
}, );
}
/*** 登录异常 ***/
if (err) {
api.toast({
      msg:'网络异常,请稍后重试',
      duration: '',
      localtion: 'middle'
     });
return;
} });
}

2、广播事件的传播,有时候登录不止登录就结束了,登录之后还有一些相应的改变,例如显示什么隐藏什么这些的。

在登录界面登录成功后,广播登录成功事件并设置登录状态。登录成功后需要执行相关命令的界面(如移除登录相关按钮、显示登录用户可见内容、获取当前登录用户资料)需设置登录监听,以便登录成功后作出反馈。

//登录界面
//api.sendEvent广播登录成功事件
api.sendEvent({
name: 'loginSuccess'
});
//api.setPrefs设置登录成功状态
api.setPrefs({
key: 'loginStatus',
value: 'loginSuccess'
});
//修改界面
//api.addEventListener监听登录成功事件(需执行才可生效)
api.addEventListener({
name: 'loginSuccess'
}, function(ret, err){
if( ret ){
//执行登录成功相关指令
}
});

判断登录状态

判断登录状态可用于决定是否打开登录界面。

//api.getPrefs获取当前登录状态
api.getPrefs({
key: 'loginStatus'
}, function(ret, err) {
//当偏好设置尚未设置或者曾设置后被移除后,返回值(ret.value)均为空。
var val = ret.value;
if (val && val != "") {
//已登录
} else {
//未登录
}
});

登出

在登出界面登出成功后,广播登出成功事件并移除登录状态。登出成功后需要执行相关命令的界面(如显示登录相关按钮、移除登录用户可见内容、清空登出用户数据及缓存)需设置登出监听,以便登出成功后作出反馈。

//登出界面
//api.sendEvent广播登出成功事件
api.sendEvent({
name: 'logoutSuccess'
});
//api.removePrefs移除登录状态
api.removePrefs({
key: 'loginStatus'
});
//修改界面
//api.addEventListener监听登出成功事件(需执行才可生效)
api.addEventListener({
name: 'logoutSuccess'
}, function(ret, err){
if( ret ){
//执行登出成功相关指令
}
});

目前一般app的逻辑为,手机号加验证码登录或者微信登录,这种情况下状态就比较麻烦。注意不要用 storage 判断是否登录或者登录之后干什么。因为登录是在特定的页面所需要登录的,这样以前的页面是不刷新的,状态无法改变。所以:addEventListener 和 getPrefs 同时使用这两个以确保一定正确。 同时,退出的时候也要将这两个时间分发出去,并且监听推出事件以改变某些状态.苹果审核的时候 如果没有安装微信,就要判断吧微信登录去掉要不然不会通过

关于APIcloud中的登录与注册的简单实现的更多相关文章

  1. XMPP iOS客户端实现三:登录、注册

    1.创建一个单例模式来管理xmpp的连接和操作 +(XMPPManager *)share { static XMPPManager *_share=nil; static dispatch_once ...

  2. 利用开源项目使discus论坛与java应用同步登录和注册

    最近做了一个资源库系统的项目,老师说可以搭建开源论坛替代自己开发社交模块(评论啊,反馈啊)来减轻负担,甚至提到了要给每个资源开一帖的功能..使我十分怀疑到底是减轻负担还是增加负担...不过怀疑归怀疑, ...

  3. 用纯jsp实现用户的登录、注册与退出

    用户的登录.注册和退出是一个系统最常见的功能,现将各功能用jsp代码表示出来 用户的登录: 其中connDB是数据库连接类,将用户名username放入session中 <%@ page con ...

  4. 使用PHP实现用户登录和注册的功能

    登陆界面 login.php <form action="logincheck.php" method="post"> 用户名:<input ...

  5. UI进阶 即时通讯之XMPP登录、注册

    1.XMPP环境搭建 http://www.cnblogs.com/fearlessyyp/p/5506644.html 第一次打开可能会有点儿慢,图片很多,步骤很详细,祝搭建成功. 2.工程中添加X ...

  6. 浅析C#中单点登录的原理和使用

    什么是单点登录?我想肯定有一部分人"望文生义"的认为一个用户只能在一处登录.其实这是错误的理解(我记得我第一次也是这么理解的).单点登录指的是多个子系统只需要登录一个,其他系统不需 ...

  7. Django用户登录与注册系统

    一.创建项目 1.1.创建项目和app python manage.py startproject mysite_login python manage.py startapp login 1.2.设 ...

  8. 微信小程序中用户登录和登录态维护

    提供用户登录以及维护用户的登录状态,是一个拥有用户系统的软件应用普遍需要做的事情.像微信这样的一个社交平台,如果做一个小程序应用,我们可能很少会去做一个完全脱离和舍弃连接用户信息的纯工具软件. 让用户 ...

  9. 入侵检测中需要监控的注册表路径研究(Windows Registry Security Check)

    1. Windows注册表简介 注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.早在Wind ...

随机推荐

  1. angular指令中@,=,&的区别

    当directive中的scope设置为一个对象的时候,该指令就有了一个独立的作用域,AngularJS提供了一种绑定策略用于隔离作用域和外部作用域进行通信. 1.@(or @attr) 使用@符号可 ...

  2. python字典学习笔记

    字典是一种可变容器模型,且可存储任意类型对象.键是不可变类型(且是唯一的),值可以是任意类型(不可变类型:整型,字符串,元组:可变类型:列表,字典).字典是无序的,没有顺序关系,访问字典中的键值是通过 ...

  3. 使用Node.js+Socket.IO搭建WebSocket实时应用【转载】

    原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新 ...

  4. this指向(匿名函数问题)

    1.匿名函数中 this一般指向window对象 2.闭包函数中的this,指向window var mod = { init: function(){ console.log('this',this ...

  5. VS2015 使用Xunit来进行单元测试

    安装Xunit: Xunit的安装现在不需要插件支持了,直接使用NuGet安装如下两个库即可: PM> Install-Package xunit PM> Install-Package ...

  6. 使用SQLPLUS创建用户名和表空间

    用sqlplus为oracle创建用户和表空间用sqlplus为oracle创建用户和表空间用Oracle10g自带的企业管理器或PL/SQL图形化的方法创建表空间和用户以及分配权限是相对比较简单的, ...

  7. vue 2 仿IOS 滚轮选择器 从入门到精通 (一)

    大家好,由于最近从事的是微信公众号和APP内嵌 H5开发,避免不了开发一些和native相同的操作功能,就如接下来说的 仿IOS滚轮选择器. 先来个截图: 接下来具体介绍如何实现的.能力有限避免不了错 ...

  8. .Net开发小技巧

    .NET项目开发中的小技巧 1.不要频繁的创建对象...这个损失是巨大的...new太多了,后果比较严重. 2.打开数据库后要及时的关闭连接,如果你不能做到一个open后跟一个close,那也没关系, ...

  9. 运行第一个 Service - 每天5分钟玩转 Docker 容器技术(96)

    上一节我们创建好了 Swarm 集群, 现在部署一个运行 httpd 镜像的 service,执行如下命令: docker service create --name web_server httpd ...

  10. 图片转换base64数据上传,并且实现预览的简便方法

    对于很多新手来说,实现上传图片并且预览功能,都会感到不知所可,然后开始在网站搜索各种各样的图片上传预览插件,但是有的时候我们只是想简单的实现判断格式,以及预览的功能,使用插件的话,会使得项目的资源空间 ...