uniapp 一键登录

官网文档地址https://uniapp.dcloud.net.cn/univerify.html

一、开发前准备

1、需要先开通uni一键登录服务

开通成功后会得到 apiKey、apiSecret。这2个信息,后续需要配置在uniCloud的云函数里。同时注意保密,这2个信息也是计费凭证

2、开通uniCloud服务

建议使用 阿里云服务空间 ~ 
然后可以开通前端网页托管功能,打包后的 安卓apk 包可以放在这里 或者 放在云储存里

3、勾选项目下manifest.json - App模块配置 - 一键登录

uniapp 一键登录_第1张图片

二、开发

概念说明:

虽然一键登录需要用到uniCloud,但并不要求开发者把所有的后台服务都迁移到uniCloud。

一键登录的代码完成是由前端来自己完成。后端只需要提供一个手机号登录的接口

1、登录页示例代码





2、uniClound login云函数代码

'use strict'
const crypto = require('crypto')
exports.main = async (event, context) => {
	const res = await uniCloud.getPhoneNumber({
		provider: 'univerify',
		apiKey: 'xxx', // 在开发者中心开通服务并获取apiKey
		apiSecret: 'xxx', // 在开发者中心开通服务并获取apiSecret
		access_token: event.access_token,
		openid: event.openid
	})
    
    // 这里需要改成你们自己后端登录成功后的接口地址 ...
	const url = event.serversUrl + '/auth/client/phoneLogin'

	// md5加密方式:手机号 时间戳 私钥
	const phone = res.phoneNumber
	const timestamp = new Date().getTime()
	const signKey = 'be6ff85f-20a1-76ce-f837-60933dca0975'
	const sign = crypto.createHash('md5').update(phone + timestamp + signKey).digest('hex')

	const result = await uniCloud.httpclient.request(url, {
		method: 'POST',
		data: {
			phone,
			timestamp,
			sign
		},
		contentType: 'json',
		dataType: 'json',
		// 是否在证书不受信任时返回错误
		rejectUnauthorized: false
	})
	console.log('服务端返回结果=', result)

	if (result.data.code == 200) {
		return {
			code: 0,
			message: '获取手机号成功',
			data: result.data.data
		}
	} else {
		return {
			code: result.data.code,
			message: result.data.msg,
			data: result.data.data
		}
	}
}

目录结构如下:

uniapp 一键登录_第2张图片

注意:这个uniClound目录是跟我们前端代码放在一起的。云函数代码写完后需要上传部署到云服务空间。

这边为了安全性考虑。一键登录成功拿到手机号后 直接在云函数里调用后端接口,在进行md5加密的方式,来保证该接口的安全性。

而不是由前端在 云函数返回手机号后 调用后端的登录接口~

你可能感兴趣的:(uniapp,uni-app,一键登录)