1. 概述
随着移动端快速发展,近年来混合开发框架的兴起,极大地提高开发效率,降低了开发成本。其中,uniapp是一款基于Vue.js开发的跨平台应用开发框架,可以快速开发小程序、H5、APP等多端应用,而且支持一套代码同时运行多端。
2. 登录功能实现思路
本篇文章将以uniapp混合开发实现登录功能为例,展示如何基于uniapp实现一套跨端的登录体系。
登录功能是一个系统的核心,也是开发的重头戏,需要涉及到以下几个方面:
2.1 用户表及关系表设计
基于系统的需求,我们需要设计出用户表及关系表:
用户表
CREATE TABLE t_user(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL
);
关系表
CREATE TABLE t_user_rel(
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
openid VARCHAR(64) NOT NULL,
type INT NOT NULL
);
我们在用户表中保存用户名和密码,可以定义其他用户信息,根据不同业务需求进行扩展。关系表主要是为了实现多种登录方式,记录opensdk登录和小程序登录的关联关系,其中type为1表示关联到小程序,2表示关联到QQ,3表示关联到微信公众号等,可以根据实际业务需求进行扩展。
2.2 小程序及H5登录
小程序和H5需要完成以下步骤进行登录操作:
检查是否已登录
处理用户授权
获取openid
验证用户登录状态
更新用户登录状态
2.3 APP登录
APP登录需要完成以下步骤进行登录操作:
用户输入用户名和密码
客户端向服务器发送登录请求
服务器端验证用户名和密码
生成token
将token返回给客户端
客户端保存token
使用token进行接口调用
3. 代码实现
接下来,我们基于uniapp开发框架进行实现。
3.1 小程序及H5登录
小程序和H5的登录功能实现
/**
* 小程序登录
* @param {code} 小程序code
* @param {type} 登录类型 1:小程序登录 2:QQ登录
*/
export function loginByCode(code, type) {
return request({
url: "/user/loginByCode",
method: "post",
data: {
code,
type,
},
});
}
/**
* 微信公众号登录
* @param {code} 微信code
* @param {type} 登录类型 3:公众号登录
*/
export function loginByWechat(code, type) {
return request({
url: "/user/loginByWechat",
method: "post",
data: {
code,
type,
},
});
}
/**
* 获取openid
* @param {token} 登录凭证
*/
export function getOpenid(token) {
return request({
url: "/auth/getOpenid",
method: "post",
data: {
token,
},
});
}
/**
* 验证token
* @param {token} 登录凭证
*/
export function verifyToken(token) {
return request({
url: "/auth/verifyToken",
method: "post",
data: {
token,
},
});
}
/**
* 更新用户关系
* @param {user_id} 用户ID
* @param {openid} openid
* @param {type} 登录类型 1:小程序登录 2:QQ登录
*/
export function updateUserRel(user_id, openid, type) {
return request({
url: "/user/updateUserRel",
method: "post",
data: {
user_id,
openid,
type,
},
});
}
3.2 APP登录
APP登录功能实现:
// 发送登录请求
this.$http
.post("/api/login", {
username,
password,
})
.then((response) => {
let data = response.data.data;
// 保存token
uni.setStorage({
key: "token",
data: data.token,
});
// 登录成功跳转到首页
uni.switchTab({
url: "/pages/index/index",
});
})
.catch((error) => {
uni.showToast({
title: "登录失败",
icon: "none",
});
});
4. 总结
本篇文章介绍了如何使用uniapp混合开发框架,设计并实现一套基于多种登录方式的跨端登录体系。在实现过程中,我们逐一介绍了小程序及H5登录及APP登录,可以根据实际业务需求根据该文案进行定制开发。