小程序判断是否授权源码auth.js

  • • 发表于 4年前
  • • 作者 宿迁老葛
  • • 3113 人浏览
  • • 0 条评论
  • • 最后编辑时间 4年前
  • • 来自 [开发工具]

原创声明:本文为作者原创,未经允许不得转载,经授权转载需注明作者和出处

一、auth.js

const configGlobal = require('../config/config_global.js');
var util = require('function.js');
var http = require('http.js');
var app = getApp();
var authHandler = {
    success: function(res) {},
    fail: function(res) {},
    complete: function(res) {},
};

/*
 * 得到保存的SESSION
 */
function getSession() {
    var session = null;
    try {
        session = wx.getStorageSync('session');
        if (session) {
            wx.checkSession({
                success: function(res) {
                    setAppGlobalData(session);
                },
                fail: function(res) {
                    session = null;
                    setAppGlobalData(session);
                }
            });
        } else {
            session = null;
            setAppGlobalData(session);
        }
    } catch (e) {}

    return session;
};


/**
 * [putLoginLog description]--记录登录日志
 * @return {[type]} [description]
 */
function putLoginLog() {
    http.POST({
        url: '/_WxaappApiServer/putLoginLog',
        data: {
            openId: app.globalData.openId,
        },
        success: function(res) {

            if (res.data.code == '0') {} else {}
        },
        fail: function(res) { console.log('request失败,res:', res); },
        complete: function(res) {}
    });
};

function setAppGlobalData(session) {
    app.globalData.openId = session.openId;
    app.globalData.unionid = session.unionid;
    app.globalData._3rd_session = session._3rd_session;
    app.globalData.userInfo = session.userInfo;
};

function getUserInfo(authHandler) {
    // 调用登录接口
    wx.login({
        success: function(res) {
            var code = res.code;

            wx.getUserInfo({
                lang: 'zh_CN',
                success: function(res) {

                    http.POST({
                        url: '/_WxaappApiServer/getUserInfo',
                        data: {
                            code: code,
                            iv: res.iv,
                            encryptedData: res.encryptedData,
                        },
                        success: function(res) {
                            //对userInfo重新赋值
                            if (res.data.code == "0") {
                                var session = res.data.data;
                                try {
                                    wx.setStorageSync('session', session);
                                    setAppGlobalData(session);
                                    authHandler.success();
                                } catch (e) {}
                            } else {}
                        },
                        fail: function(res) { console.log('request失败,res:', res); },
                        complete: function(res) {}
                    });

                },
                fail: function(res) {
                    openSettingUserInfo(authHandler);
                },
                complete: function(res) {},
            })
        },
        fail: function(res) {
            console.log("登录失败!");
        },
        complete: function(res) {},
    });
};

function openSettingUserInfo(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.userInfo']) {
                wx.showModal({
                    title: '',
                    content: '请先完成授权!在设置页面中勾选“用户信息”选项,否则部分功能将受限。',
                    showCancel: true,
                    confirmText: '前去设置',
                    confirmColor: '#004b97',
                    success: function(res) {

                        if (res.confirm) {
                            wx.openSetting({
                                success: (res) => {
                                    res.authSetting = {
                                        'scope.userInfo': true,
                                    };
                                    // authHandler.success();
                                },
                                complete: function(res) {
                                    openSettingUserInfo(authHandler);
                                },
                            })
                        }

                        if (res.cancel) {
                            authHandler.fail();
                            // 注释上一行,启用下面这一行,就是强制用户授权
                            // openSettingUserInfo(authHandler); //强制授权
                        }

                        if (!res.confirm && !res.cancel) {
                            openSettingUserInfo(authHandler);
                        }

                    }
                });

            } else {
                getUserInfo(authHandler);
            }
        }
    })
};



/**
 * 授权--用户登录
 * @param  {[type]} authHandler [description]
 * @return {[type]}                [description]
 */
function userInfo(authHandler) {
    var session = null;
    try {
        session = wx.getStorageSync('session');
        if (session) {
            wx.checkSession({
                success: function() {
                    setAppGlobalData(session);
                    authHandler.success();
                },
                fail: function() {
                    session = null;
                    getUserInfo(authHandler);

                }
            });
        } else {
            session = null;
            getUserInfo(authHandler);
        }
    } catch (e) {
        authHandler.fail();
    }

    return session;
}

/**
 * 授权--地理位置 wx.getLocation, wx.chooseLocation
 * @param  {[type]} authHandler [description]
 * @return {[type]}             [description]
 */
function userLocation(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.userLocation']) {
                wx.authorize({
                    scope: 'scope.userLocation',
                    success() {},
                    complete() {
                        openSetting_userLocation(authHandler)
                    }
                })
            } else {
                authHandler.success();
            }
        }
    })
};

function openSetting_userLocation(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.userLocation']) {
                wx.showModal({
                    title: '',
                    content: '请先完成授权!在设置页面中勾选“地理位置”选项,否则部分功能将受限。',
                    showCancel: true,
                    confirmText: '前去设置',
                    confirmColor: '#004b97',
                    success: function(res) {

                        if (res.confirm) {
                            wx.openSetting({
                                success: (res) => {
                                    res.authSetting = {
                                        'scope.userLocation': true,
                                    };
                                },
                                complete: function(res) {
                                    openSetting_userLocation(authHandler);
                                },
                            })
                        }

                        if (res.cancel) {
                            authHandler.fail();
                            // 注释上一行,启用下面这一行,就是强制用户授权
                            // openSetting_userLocation(authHandler); //强制授权
                        }

                        if (!res.confirm && !res.cancel) {
                            openSetting_userLocation(authHandler);
                        }

                    }
                });
            } else {
                userLocation(authHandler);
            }
        }
    })
};


/**
 * 授权--通讯地址 wx.chooseAddress
 * @param  {[type]} authHandler [description]
 * @return {[type]}             [description]
 */
function address(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.address']) {
                wx.authorize({
                    scope: 'scope.address',
                    success() {},
                    complete() {
                        openSetting_address(authHandler)
                    }
                })
            } else {
                authHandler.success();
            }
        }
    })
};

function openSetting_address(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.address']) {
                wx.showModal({
                    title: '',
                    content: '请先完成授权!在设置页面中勾选“通讯地址”选项,否则部分功能将受限。',
                    showCancel: true,
                    confirmText: '前去设置',
                    confirmColor: '#004b97',
                    success: function(res) {

                        if (res.confirm) {
                            wx.openSetting({
                                success: (res) => {
                                    res.authSetting = {
                                        'scope.address': true,
                                    };
                                },
                                complete: function(res) {
                                    openSetting_address(authHandler);
                                },
                            })
                        }

                        if (res.cancel) {
                            authHandler.fail();
                            // 注释上一行,启用下面这一行,就是强制用户授权
                            // openSetting_address(authHandler); //强制授权
                        }

                        if (!res.confirm && !res.cancel) {
                            openSetting_address(authHandler);
                        }

                    }
                });
            } else {
                address(authHandler);
            }
        }
    })
};



/**
 * 授权--发票抬头 wx.chooseInvoiceTitle
 * @param  {[type]} authHandler [description]
 * @return {[type]}             [description]
 */
function invoiceTitle(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.invoiceTitle']) {
                wx.authorize({
                    scope: 'scope.invoiceTitle',
                    success() {},
                    complete() {
                        openSetting_invoiceTitle(authHandler)
                    }
                })
            } else {
                authHandler.success();
            }
        }
    })
};

function openSetting_invoiceTitle(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.invoiceTitle']) {
                wx.showModal({
                    title: '',
                    content: '请先完成授权!在设置页面中勾选“发票抬头”选项,否则部分功能将受限。',
                    showCancel: true,
                    confirmText: '前去设置',
                    confirmColor: '#004b97',
                    success: function(res) {

                        if (res.confirm) {
                            wx.openSetting({
                                success: (res) => {
                                    res.authSetting = {
                                        'scope.invoiceTitle': true,
                                    };
                                },
                                complete: function(res) {
                                    openSetting_invoiceTitle(authHandler);
                                },
                            })
                        }

                        if (res.cancel) {
                            authHandler.fail();
                            // 注释上一行,启用下面这一行,就是强制用户授权
                            // openSetting_invoiceTitle(authHandler); //强制授权
                        }

                        if (!res.confirm && !res.cancel) {
                            openSetting_invoiceTitle(authHandler);
                        }

                    }
                });
            } else {
                invoiceTitle(authHandler);
            }
        }
    })
};



/**
 * 授权--微信运动步数 wx.getWeRunData
 * @param  {[type]} authHandler [description]
 * @return {[type]}             [description]
 */
function werun(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.werun']) {
                wx.authorize({
                    scope: 'scope.werun',
                    success() {},
                    complete() {
                        openSetting_werun(authHandler)
                    }
                })
            } else {
                authHandler.success();
            }
        }
    })
};

function openSetting_werun(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.werun']) {
                wx.showModal({
                    title: '',
                    content: '请先完成授权!在设置页面中勾选“微信运动步数”选项,否则部分功能将受限。',
                    showCancel: true,
                    confirmText: '前去设置',
                    confirmColor: '#004b97',
                    success: function(res) {

                        if (res.confirm) {
                            wx.openSetting({
                                success: (res) => {
                                    res.authSetting = {
                                        'scope.werun': true,
                                    };
                                },
                                complete: function(res) {
                                    openSetting_werun(authHandler);
                                },
                            })
                        }

                        if (res.cancel) {
                            authHandler.fail();
                            // 注释上一行,启用下面这一行,就是强制用户授权
                            // openSetting_werun(authHandler); //强制授权
                        }

                        if (!res.confirm && !res.cancel) {
                            openSetting_werun(authHandler);
                        }

                    }
                });
            } else {
                werun(authHandler);
            }
        }
    })
};


/**
 * 授权--录音功能 wx.startRecord
 * @param  {[type]} authHandler [description]
 * @return {[type]}             [description]
 */
function record(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.record']) {
                wx.authorize({
                    scope: 'scope.record',
                    success() {},
                    complete() {
                        openSetting_record(authHandler)
                    }
                })
            } else {
                authHandler.success();
            }
        }
    })
};

function openSetting_record(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.record']) {
                wx.showModal({
                    title: '',
                    content: '请先完成授权!在设置页面中勾选“录音功能”选项,否则部分功能将受限。',
                    showCancel: true,
                    confirmText: '前去设置',
                    confirmColor: '#004b97',
                    success: function(res) {

                        if (res.confirm) {
                            wx.openSetting({
                                success: (res) => {
                                    res.authSetting = {
                                        'scope.record': true,
                                    };
                                },
                                complete: function(res) {
                                    openSetting_record(authHandler);
                                },
                            })
                        }

                        if (res.cancel) {
                            authHandler.fail();
                            // 注释上一行,启用下面这一行,就是强制用户授权
                            // openSetting_record(authHandler); //强制授权
                        }

                        if (!res.confirm && !res.cancel) {
                            openSetting_record(authHandler);
                        }

                    }
                });
            } else {
                record(authHandler);
            }
        }
    })
};


/**
 * 授权--保存到相册 wx.saveImageToPhotosAlbum, wx.saveVideoToPhotosAlbum
 * @param  {[type]} authHandler [description]
 * @return {[type]}             [description]
 */
function writePhotosAlbum(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.writePhotosAlbum']) {
                wx.authorize({
                    scope: 'scope.writePhotosAlbum',
                    success() {},
                    complete() {
                        openSetting_writePhotosAlbum(authHandler)
                    }
                })
            } else {
                authHandler.success();
            }
        }
    })
};

function openSetting_writePhotosAlbum(authHandler) {
    wx.getSetting({
        success(res) {
            if (!res.authSetting['scope.writePhotosAlbum']) {
                wx.showModal({
                    title: '',
                    content: '请先完成授权!在设置页面中勾选“保存到相册”选项,否则部分功能将受限。',
                    showCancel: true,
                    confirmText: '前去设置',
                    confirmColor: '#004b97',
                    success: function(res) {

                        if (res.confirm) {
                            wx.openSetting({
                                success: (res) => {
                                    res.authSetting = {
                                        'scope.writePhotosAlbum': true,
                                    };
                                },
                                complete: function(res) {
                                    openSetting_writePhotosAlbum(authHandler);
                                },
                            })
                        }

                        if (res.cancel) {
                            authHandler.fail();
                            // 注释上一行,启用下面这一行,就是强制用户授权
                            // openSetting_writePhotosAlbum(authHandler); //强制授权
                        }

                        if (!res.confirm && !res.cancel) {
                            openSetting_writePhotosAlbum(authHandler);
                        }

                    }
                });
            } else {
                writePhotosAlbum(authHandler);
            }
        }
    })
};

module.exports = {
    userInfo: userInfo,
    userLocation: userLocation,
    address: address,
    invoiceTitle: invoiceTitle,
    werun: werun,
    record: record,
    writePhotosAlbum: writePhotosAlbum,
    putLoginLog: putLoginLog,
    getSession: getSession,
};

二、如何使用

在你的JS文头,引用auth.js

var auth = require('../../utils/auth.js');


        // 在调用通讯地址判断是否开启授权,如果没开启就会自动调用授权
        auth.address({
            success: function(res) {
                console.log('已授权');
                // 这儿写你的业务逻辑

            },
            fail: function(res) {
                console.log('未授权');
                wx.showToast({
                    title: '未授权',
                    duration: 2000
                });

            }
        });

三、更快速开发

上述代码中的函数请到下面的地址中的DEMO下载

WxappPlugin4SublimeText - sublime_text的微信小程序开发插件,能自动提示和代码补全。非常不错哦

https://gitee.com/abis/WxappPlugin4SublimeText

分享到:
评论区(共0条评论)
0条评论
Ctrl+Enter
作者

宿迁老葛

宿迁老葛

APP:0 帖子:1 回复:0 积分:13

已加入社区[1300]天

没啥可说的,看代码!

作者详情》
Top