uniapp unicloud之个人微信小程序云开发,微信授权登录,token验证

unicloud微信小程序云开发

最近自己因为每天吃什么烦恼,动手做了一个随机吃什么的微信小程序。
小程序使用uniapp开发 配合unicloud一个人独立完成前后端开发。
小程序二维码

  • 开发工具

    微信开发者工具
    hbuilder X

1.创建项目

使用hbuilder创建一个云开发项目
新建uniapp云开发项目
勾选启用uniCloud,这里我选择的是阿里云。
创建完成后打开项目目录,找到uniCloud右键关联云服务空间,根据提示创建并绑定。
参考https://uniapp.dcloud.io/uniCloud/concepts/space

2.配置

创建完成后在项目目录的manifest.json,配置小程序后台获取的微信小程序appID。
配置微信小程序appID

3.UI组件引入

我这里使用了 uview UI组件,根据教程安装即可(不使用可不引入)

4.公共请求方法

为了方便后续请求云函数,新建了一个common目录,封装了一个cloudApi公共方法。
公共方法

let token = uni.getStorageSync('token');

function call(option) {
	return new Promise((resolve, reject) => {
		if (!option.data) option.data = {};
		if (token) option.data.token = token;
		uni.showLoading({
			mask:true
		});
		uniCloud.callFunction({
			name: option.name,
			data: option.data,
			success: (res) => {
				uni.hideLoading();
				if (res.result.code == 200) {
					if (res.result.data.token) {
						token = res.result.data.token;
						uni.setStorageSync('token', res.result.data.token);
					}
					if (option.success) option.success(res.result.data);
					resolve(res.result.data);
				} else if(res.result.code == 201) {
					uni.showToast({
						icon: 'none',
						title: res.result.msg
					})
					if (option.fail) option.fail(res);
				} else if(res.result.code == 203) {
					// uni.clearStorageSync();
					uni.showToast({
						icon: 'none',
						title: token?'请重新登录':'请登录'
					})
					setTimeout(()=>{
						uni.navigateTo({
							url:'/pages/login/login'
						})
					},1000)
				}
			},
			fail: (err) => {
				uni.hideLoading();
				if (option.fail) option.fail(err);
				reject();
			},
			complete: () => {
				uni.hideLoading();
				if (option.complete) option.complete();
			}
		});
	});
}
module.exports = {
	call: call
}

在main.js中引入
引入公共方法

5.微信授权登录

获取code传给后台

wxLogin() {
	let _this = this;
	let code;
	uni.login({
		provider: 'weixin',
		success: res => {
			code = res.code;//获取登录需要的code
		}
	});
	uni.getUserProfile({
		desc: '用户信息,拿来吧你!',
		lang: 'zh_CN',
		success: res => {
			uni.showLoading();
			let data = res.userInfo;//授权拿到用户信息
			data.code = code;
			// 调用登录云函数
			_this.$cloudApi.call({
				name: 'login',
				data,
				success: res => {
					uni.setStorageSync('userInfo', data);//拿到后台返回的用户信息
					uni.reLaunch({
						url:'/pages/index/index'
					})
				}
			});
		}
	});
}

云函数接收code和appId,appSecret一起使用,换取openid。
添加用户到user表。

'use strict';
const {
	appId,
	appSecret,
	getToken,
	verifyToken
} = require("wx-common");
const db = uniCloud.database();

exports.main = async (event, context) => {
	//获取前端参数
	const {
		code,
		nickName,
		gender,
		city,
		province,
		country,
		avatarUrl
	} = event;
	//获取openid
	const res = await uniCloud.httpclient.request(
		`https://api.weixin.qq.com/sns/jscode2session?appid=${appId}&secret=${appSecret}&js_code=${code}&grant_type=authorization_code`, {
			dataType: "json"
		}
	)
	let openid = res.data.openid;

	//获取user表
	const collection = db.collection('user');

	// 生成token
	let token = getToken(openid)
	// 新增并返回用户信息
	let userData = {
		nickName,
		gender,
		city,
		province,
		country,
		avatarUrl,
		openid
	}

	// 往user表添加用户信息
	const resData = await db.collection("user").add(userData)
	//将用户信息返回前端
	letdata = {
		nickName,
		gender,
		city,
		province,
		country,
		avatarUrl
	}
	return {
		code: 200,
		msg: '登录成功',
		data: {
			userInfo: data,
			token: token
		}
	}
};

这里token的生成是使用的jsonwebtoken,我是在云函数common目录下放了一个wx-common目录。
公共目录

在wx-common目录下使用

npm install jsonwebtoken

安装jsonwebtokne后直接引入使用即可,,并写了一个公共js生成解析token。

const jwt = require("jsonwebtoken"); //webjsontoken
//生成token
function getToken(openid) {
	// sign(加密数据,加密辅助,过期时间(单位/s))
	return jwt.sign({
		openid
	}, appSecret, {
		expiresIn: 60 * 60 * 24 * 30
	});
}
//解密token
function verifyToken(token) {
	return jwt.verify(token, appSecret, (err, decode) => {
		return decode
	})
}

module.exports = {
	getToken,
	verifyToken
}

这也是我第一次个人云开发微信小程序,有问题可以一起探讨交流,欢迎各位大佬指正,谢谢!
下面是我的小程序二维码,欢迎查看。
小程序二维码

  • 13
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
UniApp 是一套基于 Vue.js 的跨平台开发框架,它可以同时用于构建 Web、iOS、Android、H5 等应用。在 UniApp 中,如果你想要开发微信小程序并实现授权登录,你可以按照以下步骤进行: 1. **引入微信 SDK:**首先,确保在你的项目中安装了 UniApp微信小程序支持插件。在 `uni-app.json` 文件的 `frameworks` 部分添加 `uni-weixin`: ```json { "frameworks": { "webpack": {}, "vant": {}, "uni-weixin": {} // 添加微信小程序支持 }, } ``` 2. **配置微信 AppID:**在 `uniapp.config.js` 文件中,配置微信小程序AppID 和 Secret,这将用于请求微信服务器授权。 ```javascript const wxConfig = { // ... 其他配置项 appid: 'your.wx.appid', // 替换为你的小程序 AppID // ... }; ``` 3. **调用微信登录接口:**在需要使用授权登录的地方,使用 UniApp 提供的 `login` 方法,传入 `wx.login` 函数: ```javascript uni.login({ provider: 'weixin', success(res) { // 获取到code后,可以用它换取access_token和openid // 使用uni.getUserInfo方法获取用户信息 }, fail(err) { console.error('Login failed:', err); } }); ``` 4. **获取用户信息:**在成功获取到临时code后,调用 `getUserInfo` 方法获取用户的基本信息,如昵称、头像等。 ```javascript uni.getUserInfo({ provider: 'weixin', success(res) { // res.userInfo 包含微信用户的详细信息 }, fail(err) { console.error('Get user info failed:', err); } }); ``` 5. **保存用户信息:**通常在服务器端处理获取到的用户信息,并与数据库中的用户表进行关联,存储或更新用户数据。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值