在app.js里的onLaunch里写入下面代码

   wx.login({
      success: res => {
        //存储登录code,提交给后台获取登录数据
        wx.setStorageSync('wx_login', res.code);
      }
    })

公共方法代入

const login = ({
	success
}) => {
	return new Promise(function(resolve, reject) {
		//判断是否存在登录状态,存在则直接返回成功
		if (wx.getStorageSync('access_token') != '') {
			success([]);
			return true;
		}
		wx.showLoading({
			title: '微信授权中',
			mask:true
		})
		wx.getUserProfile({
			desc: '获取用户信息',
			success: function(e) {
				var data = {};
				//获取缓存中的登录code
				data['code'] = wx.getStorageSync('wx_login');
				data['iv'] = e.iv;
				data['encryptedData'] = e.encryptedData;
				//存在上级分享token//可以是存储的上级用户ID
				if (wx.getStorageSync('share_token') != '') {
					data['share_token'] = wx.getStorageSync('share_token');
				}
				//传入后台解析数据并储存
				wx.request({
					url: 'auth/member_oauth',
					data: data,
					success: function(res) {
						if (res.code == 1) {
						//存储登录状态token 或者用户ID
							wx.setStorageSync('access_token', res.data.user_token);
							//因为code已经失效,所以重新存储登录code
							wx.login({
								success: res => {
									wx.setStorageSync('wx_login', res
										.code);
									wx.hideLoading({
										success: (res) => {},
									})
									wx.showToast({
										title: '授权成功',
										icon: 'none'
									})
								}
							})
							success(res);
						} else {
							wx.hideLoading({
								success: (res) => {},
							})
							//登录失效,重新获取登录code
							wx.login({
								success: res => {
									wx.setStorageSync('wx_login', res
										.code);
									wx.hideLoading({
										success: (res) => {},
									})
									wx.showToast({
										title: '授权登录失败,请重新授权',
										icon: 'none'
									})
								}
							})
						}
					}
				})
			},
			fail: function() {
				wx.hideLoading({
					success: (res) => {},
				})
				//拒绝登录,重新获取登录code
				wx.login({
					success: res => {
						wx.setStorageSync('wx_login', res.code);
						wx.hideLoading({
							success: (res) => {},
						})
						wx.showToast({
							title: '您取消了授权',
							icon: 'none'
						})
					}
				})
			}
		})
	}).catch({})
}
/* 公共showTotast  loading 方法 */
module.exports = {
	login: login
}

在其他文件使用方法
我将公共方法放入init.js中

const init = require('../../utils/init.js');
	init.login({
			success:function(){
			//	授权登录成功后的逻辑代码
		})
})
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐