uniapp开发微信小程序获取用户头像、昵称和手机号一键登录

 1 <!-- 登录页面 版本一 -->
 2          <!-- #ifdef MP-WEIXIN -->
 3         <view class="mpwx-login column-center">
 4             <view class="loginLogo">
 5                 <form @submit="onSubmit(true, $event)" class="loginContent">
 6                     <button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
 7                         <image class="avatar"
 8                             :src="formData.avatarUrl ? formData.avatarUrl : require('../../static/images/default_avatar.png')">
 9                         </image>
10                         <text class="loginLogoText" v-if="isShow">授权头像</text>
11                     </button>
12                     <view class="nameContent">
13                         <view class="title">昵称</view>
14                         <input name="nickName" type="nickname" placeholder="请填写昵称" class="weui-input"
15                             v-model="formData.nickName" />
16                     </view>
17 
18                     <view class="loginBtn">
19                         <!-- <button class="btn" form-type="submit" open-type="getPhoneNumber"
20                             @getphonenumber="getPhoneNumber">手机号一键登录</button> -->
21                     </view>
22                     <button size="lg" class="white br60 row-center btn" form-type="submit" open-type="getPhoneNumber"
23                     @getphonenumber="getPhoneNumber">
24                         <image class="mr10 image" src="/static/images/icon_wechat.png"></image>
25                         <text>手机号快捷登录</text>
26                     </button>
27                     <view class="muted mt20">微信授权登录后才可进行更多操作哦</view>
28                 </form>
29             </view>
30 
31         </view>
data() {
            return {
                mobile: "",//登录前获取的用户手机号
                avatarUrl: '',
                nickName: '',
                gender: '',
                // 以下是登录页面测试功能 开始
                iv: "",
                encryptedData: '',
                formData: {
                    nickName: '',
                    avatarUrl: ''
                },
                isShow: true,
                token: ""
                // 以下是登录页面测试功能 结束
            };
        },
// 以下是登录页面版本一测试功能 开始
            //头像图片持久化
            uploadImage(url1) {
                console.log("上传的头像:",url1);
                //uni.uploadFile将微信返回的临时地址转成文件流传输给后端,从而上传服务器,拿到永久地址
                // uni.uploadFile({
                //     url: `https://qmhly.hls.com/nine/getImgUrl`,
                //     filePath: url1,
                //     name: 'file',
                //     header: {
                //         'content-type': 'application/x-www-form-urlencoded',
                //     },
                //     formData: {
                //         'user': this.formData.nickName
                //     },
                //     success: (uploadFileRes) => {
                //         this.formData.avatarUrl = JSON.parse(uploadFileRes.data).data;
 
                //         //进入登录流程
                //         this.uniLogin();
                //     }
                // });
          //上传接口
uploadFile(url1).then(res => { uni.hideLoading(); console.log("头像上传返回:",res); this.avatarUrl = res.url }); }, //获取微信头像 onChooseAvatar(e) { this.formData.avatarUrl = e.detail.avatarUrl; console.log("eeee", e); }, onSubmit(confirm, event) { if (confirm) { try { let { nickName } = event.detail.value; this.formData.nickName = nickName; this.nickName = nickName; } catch (e) { //TODO handle the exception uni.showToast({ icon: 'none', title: e.message }); return; } } }, // 以下是登录页面测试功能 结束 async getPhoneNumber(e) { console.log("eeeeeeee:",e); if (this.formData.avatarUrl && this.formData.nickName) { //微信小程序返回的相关数据 this.iv = e.detail.iv; this.encryptedData = e.detail.encryptedData; uni.showToast({ title: '登录中', icon: 'loading', duration: 1000, }); //处理头像链接 this.uploadImage(this.formData.avatarUrl); const { encryptedData, iv } = e.detail; let data = { code: this.code, encrypted_data: encryptedData, iv } // this.fieldType = FieldType.MOBILE if (encryptedData) { this.$changeUserMobileMP(data) } } else { uni.showToast({ title: `请选择头像或输入昵称`, icon: 'none' }); } // const { // encryptedData, // iv // } = e.detail; // let data = { // code: this.code, // encrypted_data: encryptedData, // iv // } // // this.fieldType = FieldType.MOBILE // if (encryptedData) { // this.$changeUserMobileMP(data) // } }, $changeUserMobileMP(data) { console.log("获取手机号data:",data); changeUserMobile(data).then(res => { if (res.code == 1) { this.mobile = res.data.phoneNumber //调用mnpLoginFun this.wxLoginFun() } }) }, async wxLoginFun() { uni.showLoading({ title: '登录中...', mask: true }); const wxCode = await getWxCode() let params = { code: wxCode, nickname: this.nickName, headimgurl: this.avatarUrl, mobile: this.mobile } console.log("登录参数:",params); // return false const {code, data, msg} = await authLogin(params) if(code == 1) { this.loginHandle(data) }else { this.$toast({ title: msg }) } }, // 小程序登录 async mnpLoginFun() { const {userInfo: {avatarUrl, nickName, gender}} = await getUserProfile() console.log("userInfo:",avatarUrl, nickName, gender); this.avatarUrl = avatarUrl this.nickName = nickName this.gender = gender // uni.showLoading({ // title: '登录中...', // mask: true // }); // const wxCode = await getWxCode() // const {code, data, msg} = await authLogin({ // code: wxCode, // nickname: nickName, // headimgurl: avatarUrl, // mobile: this.mobile, // }) // if(code == 1) { // this.loginHandle(data) // }else { // this.$toast({ // title: msg // }) // } },

page {
        background-color: #fff;
        text-align: center;

        .login {
            height: auto;

            .mpwx-login {
                height: 100%;

                .avatar {
                    display: inline-block;
                    width: 120rpx;
                    height: 120rpx;
                    border-radius: 50%;
                    border: 1px solid #eee;
                    overflow: hidden;
                }
                .user-name {
                    height: 40rpx;
                }
                .image {
                    width: 50rpx;
                    height: 50rpx;
                }

                .btn {
                    background-color: #09BB07;
                    width: 580rpx;
                    margin: 80rpx auto 0;
                }
            }


            .h5-login {
                padding-top: 100rpx;
                display: flex;
                flex-direction: column;
                align-items: center;
                height: 100%;
                box-sizing: border-box;

                .logo {
                    width: 280rpx;
                    height: 80rpx;
                    margin-bottom: 50rpx;
                }

                .input {
                    width: 670rpx;
                    border-bottom: $-solid-border;
                    margin-top: 30rpx;
                }

                .sms-btn {
                    border: 1px solid $-color-primary;
                    width: 176rpx;
                    height: 60rpx;
                    box-sizing: border-box;
                }

                .wx-login {
                    margin-top: 60rpx;

                    .image {
                        margin-top: 40rpx;
                        width: 80rpx;
                        height: 80rpx;
                    }
                }
            }
        }
    }
    // 以下是登录页面测试功能 开始
    .avatar-wrapper {
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        background: none;
        color: inherit;
        border: none;
        padding: 0;
        font: inherit;
        cursor: pointer;
        outline: inherit;
 
        .avatar {
            height: 120rpx;
            width: 120rpx;
            border-radius: 60rpx;
            border: 1px solid #eee;
        }
    }
 
    .avatar-wrapper::after {
        border: none;
    }
 
    .nameContent {
        display: flex;
        margin: 70rpx 0;
        border-top: 1px solid #eee;
        border-bottom: 2rpx solid #eee;
        padding: 20rpx 40rpx;
        width: 100vw;
        box-sizing: border-box;
        font-size: 28rpx;
        align-items: center;
 
        .title {
            margin-right: 40rpx;
        }
    }
 
    .loginLogo {
        height: 700rpx;
        display: flex;
        justify-content: center;
        align-items: center;
 
        .loginContent {
            display: flex;
            justify-content: center;
            align-items: center;
            flex-direction: column;
            width: 100%;
 
            .loginLogoText {
                font-size: 24rpx;
                color: #828282;
                margin-top: 20rpx;
            }
        }
    }
 
    .loginBtn {
        width: 100%;
 
        .btn {
            width: 70%;
            margin: 0 auto;
            border-radius: 20rpx;
            background-color: #ee3236;
            color: white;
        }
    }
    // 以下是登录页面测试功能 end

样式自己调整吧。

效果图:

 

posted on 2025-01-09 14:40  奔驰的码儿  阅读(4915)  评论(1)    收藏  举报

导航