微信小程序入门【三】:实现简单登录退出和个人信息页面

这篇博客详细介绍了在微信小程序中实现登录和退出登录的逻辑,包括使用Dialog组件提示用户登录,调用wx.getUserProfile获取用户信息,将信息存储在本地及全局变量,并在退出登录时清除相关信息。此外,代码还展示了如何处理用户权限授权和异常情况。
摘要由CSDN通过智能技术生成

效果图预览

这个框很是惆怅,但是真机调试没出现过,这个bug下次再解决吧。这次说说登录。

效果图:

fa3760a0331344f2a15be924d348b2f5.png

 

6bcfd391b13645e2b060acd42d5c31bd.png

71d8befb8b2a46c1919cd849b0b13a12.png

77a557bf3104487090323b6317a0e7e6.png

 

附上代码:

home.wxml

<!--pages/scroll/scroll.wxml-->
<view class="body">
    <!-- 头部 -->
    <view class="top">
        <view class="userinfo">
            <view class="userinfo-avatar" >
            <!-- <block > -->
                <van-image round width="4rem" height="4rem" src="" bindtap="login" wx:if="{{userInfo.length==0}}"/>
            <!-- </block> -->
            <!-- <block wx:if="{{userInfo.length!=0}}"> -->
                <van-image round width="4rem" height="4rem" src="{{userInfo.avatarUrl}}"  wx:else/>
            <!-- </block> -->
            </view>
            <view class="userinfo-nickname">
                <text bindtap="login" wx:if="{{userInfo.length==0}}">Hi 游客</text>
                <text wx:else>{{userInfo.nickName}}</text>
                  <!-- <open-data type="userNickName"></open-data> -->
            </view>    
        </view>
        <view class="nav">
            <!-- square 正方形格子-->
            <van-cell-group square inset>
                <!-- direction="horizontal"  横向 -->
                <van-grid clickable column-num="4" border="">
                    <van-grid-item icon="star-o" text="收藏" />
                    <van-grid-item icon="coupon-o" text="优惠" />
                    <van-grid-item icon="gift-o" text="礼物" />
                    <van-grid-item icon="smile-o" text="反馈" />
                </van-grid>
            </van-cell-group>
        </view>
    </view>
    <!-- 内容 -->
    <view class="content">
        <van-cell-group inset  class="panel">
            <van-cell title="任务中心" value="点击查看" is-link />
            <van-grid square column-num="4" border="">
                <van-grid-item icon="star-o" text="收藏"/>
                <van-grid-item icon="coupon-o" text="收藏"/>
                <van-grid-item icon="gift-o" text="收藏"/>
                <van-grid-item icon="smile-o" text="收藏"/>
            </van-grid>
        </van-cell-group>
        
        <van-cell-group inset>
            <van-cell title="任务中心" icon="shop-o" is-link />
            <van-cell title="活动会场" icon="shop-o"  is-link />
            <van-cell title="收货地址" icon="shop-o"  is-link />
            <van-cell title="个人信息" icon="shop-o"  is-link />
            <van-cell title="账号设置" icon="shop-o"  is-link />
            <van-cell title="权限设置" icon="shop-o"  is-link url="/pages/button/button"/>
            <van-button  wx:if="{{userInfo.length!=0}}" block  type="danger" bindtap="exitLogin"><text style="font-size: large;">退出登录</text></van-button>
        </van-cell-group>
    </view>
    <!-- 解决底部导航栏遮挡页面内容,自己加一个view -->
    <view class="standView">@技术支持:江阔jk921</view>
    <van-dialog id="van-dialog" />
    <van-toast id="van-toast" />
</view>

 

home.wxss

/* pages/scroll/scroll.wxss */

.top{
    width: 100%;
    height: 400rpx;
    background-color:seashell;
    padding-top: 150rpx;
}

.userinfo{
    display: flex;
    flex-direction: column;
    align-items: center;
}
.userinfo-avatar {
    overflow: hidden;
  }

.userinfo-nickname{
    font-size: large;
    color: #494949;
}

.nav{
    padding-top:100rpx;
   
}
.content{
    padding-top: 50rpx;
}
.panel{
    margin: 50rpx;
}
.standView{
    width: 100%;
    height: 300rpx;
    font-size: x-small;
    color: #c8c8c9;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

 

home.js

login登录逻辑处理


   login(e) {
    var that = this;
        Dialog.confirm({
                title: '您还未登录',
                message: '请先登录之后再进行操作',
            })
            .then(() => {
                //1、判断是否授权
                wx.getSetting({
                    success(res) { 
                        console.log(res.authSetting)
                        if (res.authSetting['scope.userInfo']) {
                            //2、获取用户个人信息
                            that.getUserProfile();
                        } else {
                            //2、向用户发起授权请求
                            wx.authorize({
                                scope: 'scope.userInfo',
                                success() {
                                    console.log("授权成功------")
                                    //3、获取用户个人信息
                                    that.getUserProfile();
                                },
                                fail() {
                                    wx.showModal({
                                        content: '检测到您没打开用户信息权限,是否去设置打开?',
                                        confirmText: "确认",
                                        cancelText: "取消",
                                        success: function (res) {
                                            console.log(res);
                                            //3、点击“确认”时打开设置页面,手动让用户授权
                                            if (res.confirm) {
                                                wx.openSetting({
                                                    success: (res) => {}
                                                })
                                            } else {
                                                console.log('用户点击取消')
                                            }
                                        }
                                    });
                                }
                            })
                        }
                    }
                })
                // on confirm
            })
            .catch(() => {
                // on cancel
            });
    },
    //获取用户个人信息
    getUserProfile() {
        // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
        // 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
        wx.getUserProfile({
            desc: '请先授权登录', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
            success: (res) => {
                var user = res.userInfo;
                //缓存用户信息
                wx.setStorageSync('userInfo', user);
                //全局变量
                app.globalData.userInfo = user;
                console.log("全局变量" + JSON.stringify(app.globalData.userInfo))
                console.log(res.userInfo)
                this.setData({
                    userInfo: res.userInfo
                })
            }
        })
    },

exitLogin退出登录

 //退出登录
    exitLogin: function () {
        console.log("------------------exit-------")
        Dialog.confirm({
                title: '',
                message: '退出登录?',
            })
            .then(() => {
                // on confirm
                try {
                    wx.removeStorageSync('userInfo'); //清除本地缓存
                    app.globalData.userInfo = ''; //清除全局变量
                    console.log("清除全局变量:" + app.globalData.userInfo)
                    this.setData({
                        userInfo: ''
                    })
                    Toast("退出登录成功!")
                } catch (e) {
                    // Do something when catch error
                }
                wx.switchTab({
                    url: '/pages/home/home'
                });
            })
            .catch(() => {
                // on cancel
            });
    },

附上home.js全码:

// pages/scroll/scroll.js
import Dialog from '../../miniprogram_npm/@vant/weapp/dialog/dialog';
import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast';

//在page页面引入app,同时声明变量,获得所需要的全局变量
const app = getApp();

Page({

    /**
     * 页面的初始数据
     */
    data: {
        userInfo: {},
    },

   login(e) {
    var that = this;
        Dialog.confirm({
                title: '您还未登录',
                message: '请先登录之后再进行操作',
            })
            .then(() => {
                //1、判断是否授权
                wx.getSetting({
                    success(res) { 
                        console.log(res.authSetting)
                        if (res.authSetting['scope.userInfo']) {
                            //2、获取用户个人信息
                            that.getUserProfile();
                        } else {
                            //2、向用户发起授权请求
                            wx.authorize({
                                scope: 'scope.userInfo',
                                success() {
                                    console.log("授权成功------")
                                    //3、获取用户个人信息
                                    that.getUserProfile();
                                },
                                fail() {
                                    wx.showModal({
                                        content: '检测到您没打开用户信息权限,是否去设置打开?',
                                        confirmText: "确认",
                                        cancelText: "取消",
                                        success: function (res) {
                                            console.log(res);
                                            //3、点击“确认”时打开设置页面,手动让用户授权
                                            if (res.confirm) {
                                                wx.openSetting({
                                                    success: (res) => {}
                                                })
                                            } else {
                                                console.log('用户点击取消')
                                            }
                                        }
                                    });
                                }
                            })
                        }
                    }
                })
                // on confirm
            })
            .catch(() => {
                // on cancel
            });
    },
    //获取用户个人信息
    getUserProfile() {
        // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
        // 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
        wx.getUserProfile({
            desc: '请先授权登录', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
            success: (res) => {
                var user = res.userInfo;
                //缓存用户信息
                wx.setStorageSync('userInfo', user);
                //全局变量
                app.globalData.userInfo = user;
                console.log("全局变量" + JSON.stringify(app.globalData.userInfo))
                console.log(res.userInfo)
                this.setData({
                    userInfo: res.userInfo
                })
            }
        })
    },
    //退出登录
    exitLogin: function () {
        console.log("------------------exit-------")
        Dialog.confirm({
                title: '',
                message: '退出登录?',
            })
            .then(() => {
                // on confirm
                try {
                    wx.removeStorageSync('userInfo'); //清除本地缓存
                    app.globalData.userInfo = ''; //清除全局变量
                    console.log("清除全局变量:" + app.globalData.userInfo)
                    this.setData({
                        userInfo: ''
                    })
                    Toast("退出登录成功!")
                } catch (e) {
                    // Do something when catch error
                }
                wx.switchTab({
                    url: '/pages/home/home'
                });
            })
            .catch(() => {
                // on cancel
            });
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {

    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
        this.getTabBar().init();

        //登录状态缓存
        let userInfo = wx.getStorageSync("userInfo");
        console.log("---缓存-----:"+userInfo)
        console.log("----onshow 全局变量----:"+app.globalData.userInfo)
        this.setData({
        	userInfo:userInfo
          })
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    }
})

 

大功告成!

 

 

 

 

 

 

  • 17
    点赞
  • 189
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值