uni-app第三方登陆-微信

uni-app第三方登陆-微信

结合上文全局登陆校验,实现微信授权登录
官方手册地址: https://uniapp.dcloud.io/api/plugins/login?id=getuserinfo

一、书写两个界面

  • login.vue 用于用户登陆
  • my.vue 我的界面,存放校验登陆的函数

1.1 my.vue

<script>
    var loginRes;
    export default {
        onLoad:function(){
            loginRes = this.checkLogin('../my/my''2');
            if(!loginRes){
                return;
            }
        }
    }
</script>

如果登陆过,则不发生跳转,直接 return;,否则跳转至 login.vue 并携带两个参数(登陆成功后的跳转界面、跳转方式),完成登陆操作。

1.2 login.vue

<script>
    var _self;
    export default {
        data() {
            return {
                backpage:'',
                backtype:''
            };
        },
        onLoad:function(options){
            _self = this;
            // #ifdef APP-PLUS
                uni.login({
                    success: (res) => {
                        // console.log(JSON.stringify(res))
                        // 第三方登陆
                        // res 对象格式
                        //{"code":"***",
                        //"authResult":{
                            //"openid":"***",
                            //"scope":"snsapi_userinfo",
                            //"refresh_token":"**",
                            //"code":"****",
                            //"unionid":"***",
                            //"access_token":"***",
                            //"expires_in":7200
                        //},
                        //"errMsg":"login:ok"}

                         uni.getUserInfo({
                            success: (info) => {
                                // console.log(JSON.stringify(info))
                                // info 对象格式
                                // {"errMsg":"getUserInfo:ok",
                                // "rawData":"...
                                // "userInfo":{
                                    //"openId":"***",
                                    //"nickName":"***",
                                    //"gender":1,
                                    // "city":"Xi'an",
                                    // "province":"Shaanxi",
                                    // "country":"China",
                                    // "avatarUrl":"头像",
                                    // "unionId":"oU5Yyt_agt547zWyA0v0eLfFPqxo"
                                //},"signature":""}
                                // 与服务器交互将数据提交到服务端数据库
                                uni.request({
                                    url: _self.apiServer+'member&m=login',
                                    method: 'POST',
                                    header: {'content-type' : "application/x-www-form-urlencoded"},
                                    data: {
                                         openid: info.userInfo.openId,
                                         name: info.userInfo.nickName,
                                         face: info.userInfo.avatarUrl,
                                    },
                                    success: res => {
                                        console.log(JSON.stringify(res))
                                        res = res.data;
                                        if(res.status == 'ok'){
                                            uni.showToast({
                                                title: '登陆成功',
                                                mask: false,
                                                duration: 1500
                                            });
                                            uni.setStorageSync('SUID' , res.data.u_id + '');
                                            uni.setStorageSync('SRAND', res.data.u_random + '');
                                            uni.setStorageSync('SNAME', res.data.u_name + '');
                                            uni.setStorageSync('SFACE', res.data.u_face + '');

                                            // 判断跳转方式
                                            if(options.backtype == '1'){
                                                uni.redirectTo({url:options.backpage});
                                            }else{
                                                uni.switchTab({url:options.backpage});
                                            }
                                        }else{

                                            uni.showToast({title:res.data});
                                        }
                                    },
                                    fail: () => {
                                        console.log('登陆失败')
                                    },
                                    complete: () => {}
                                });

                            },
                            fail: () => {
                                uni.showToast({title:"微信登录授权失败"});
                            }
                        })
                    },
                    fail: () => {
                        uni.showToast({title:"微信登录授权失败"});
                    }
                })
            // #endif
            console.log(options)
        }
    }
</script>

主要涉及到2个方法:

  • uni.login
  • uni.getUserInfo
uni.login

用于触发第三方登陆,调起微信登陆,登陆成功后返回对象格式如下:

{    
    "code":"***",
    "authResult":{
        "openid":"***",
        "scope":"snsapi_userinfo",
        "refresh_token":"**",
        "code":"****",
        "unionid":"***",
        "access_token":"***",
        "expires_in":7200
    },
    "errMsg":"login:ok"
}
uni.getUserInfo

获取用户信息,通过上方的 uni.login 方法会得到用户 access_token,故 uni.getUserInfo 在此基础上获取用户的 openid、userInfo(头像、昵称) 等信息。

{
    "errMsg":"getUserInfo:ok",
    "rawData":"...
    "
userInfo":{
        "
openId":"***",
        "
nickName":"***",
        "
gender":1,
        "
city":"Xi'an",
        "province":"Shaanxi",
        "country":"China",
        "avatarUrl":"头像",
        "unionId":"oU5xxxxxxxxxxeLfFPqxo"
    },
    "signature":""
}
uni.request

此方法为 uni-app 中用于网络请求。详细见官方手册:https://uniapp.dcloud.io/api/request/request?id=request

二、效果

点击 my.vue 将会触发 微信登陆授权界面,如下:

登陆成功后,向远程服务器发送一个保存用户信息的请求

posted @ 2019-03-30 09:56 niceyoo 阅读(...) 评论(...) 编辑 收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android获取屏幕尺寸,屏幕适配

获取屏幕尺寸&#xff1a; DisplayMetrics dm new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int w dm.widthPixels;//宽 int h dm.heightPixels;//高 Log.i("lgq","ww"w"....h"h); 输出&#xff1a;2019…

点击一百万次

在一个群里看到的题目&#xff0c;就找他要来玩儿了。http://120.24.86.145:9001/test/得点击一百万次图片才行。 可以看出&#xff0c;是通过jqeury发包操作点击量的&#xff0c;所以只需要发一个包控制点击量就ok了 转载于:https://www.cnblogs.com/nul1/p/8611341.html

基于token与基于服务器的身份认证

基于token与基于服务器的身份认证 1、基于服务器的身份认证 我们清楚 http 协议是无状态的&#xff0c;也就是说&#xff0c;如果我们已经认证了一个用户&#xff0c;那么他下一次请求的时候&#xff0c;服务器不知道我是谁&#xff0c;我们就必须要再次认证。 我们与浏览器交…

Android 视频通话

基于腾讯云视频SDK 实现效果 实现步骤&#xff1a; 1、登录腾讯云开发者平台 https://cloud.tencent.com/product/trtc 2、进入 实时音视频 主页。并创建应用 进入实时音视频方法&#xff1a;点击——控制台——>云产品 3、进入开发辅助主页&#xff0c;创建uid 第四…

c++的作业2

本题再次加深了我对于素数与非素数的认识&#xff0c;以及学会了控制每行素数的个数。 本题&#xff0c;让我再一次加深对于是switch的用法&#xff0c;case中只能是常量表达式&#xff0c; break&#xff0c;continue都适用于三种循环结构&#xff0c;即&#xff0c;for&#…

开箱一个docker

开箱一个docker 1、docker 的出现&#xff1f; 1.1、环境切换配置麻烦 通常我们在开发环境写好代码&#xff0c;打个war/jar包&#xff0c;扔到tomcat下&#xff0c;就算是跑起来了&#xff1b;但是扔到生产环境就挂了&#xff0c;what&#xff1f;各种错误。。。 1.2、应用之…

jedis jedispool Redistemplate

jedis jedispool Redistemplate 整理了之前学习 redis 的笔记&#xff0c;强烈建议看最后总结。 在大型系统数据读请求中&#xff0c;基本上90%都可以通过分布式缓存集群来抗下来&#xff0c;而 Redis 又是分布式缓存集群的主要践行者&#xff0c;因此了解 Redis 是必不可少的…

支付宝支付提示 4006 ISV权限不足,建议在开发者中心检查签约是否已经生效

解决方法非常简单&#xff1a; 1、首先登录支付宝商家中心&#xff1a;https://b.alipay.com/index.htm 查看产品中心&#xff0c;对应功能有木有开通&#xff0c;或者签约开通 2、登录支付宝开放平台&#xff1a;https://open.alipay.com/platform/home.htm 查看应用功能列…

android 自定义相机,Camera,相机遮罩层

实现效果&#xff1a; 实现方法&#xff1a;一个自定义view实现demo 一、自定义相机Camera&#xff0c;无API版本限制 &#xff08;1&#xff09;。实现接口 implements SurfaceHolder.Callback private SurfaceView mView;private Camera mCamera; private int cameraId 0;/…

RedisTemplate在项目中的应用

RedisTemplate在项目中的应用 如下主要通去年无聊做的 "涂涂影院后台管理系统" 一个 demo&#xff0c;看 RedisTemplate 的使用。 主要用到地方&#xff1a;视频首页轮播图的获取&#xff0c;以及搜索检索界面&#xff0c;如下图所示&#xff1a; 由于是非maven非sp…

Android 蓝牙开发,搜索蓝牙列表,蓝牙连接,蓝牙通讯

申请打开蓝牙 <!-- 蓝牙权限 --> <uses-permission android:name"android.permission.BLUETOOTH" /> <uses-permission android:name"android.permission.BLUETOOTH_ADMIN" />private final int BLUE_REQUEST_CODE 551; public void s…

jeecg uedit 自定义图片上传路径

jeecg uedit 图片上传配置自定义物理路径&#xff0c;简单描述&#xff1a;我们知道 jeecg 中使用的 uedit 默认图片上传路径为 “当前项目\plug-in\ueditor\jsp\uploadx\日期\图片.png”&#xff0c;但是把图片放在项目中显然是很不友好的&#xff0c;所以我们自定义上传路径。…