Uniapp小程序登录和登录验证

小程序的登录验证流程图:

第一步:获取微信用户的基本信息:

调用getUserProfile方法,获取用户基本信息

methods:{
   getUserProfile(){
           desc:"完善用户信息",
           success:(res)=>{
            this.saveUserInfo(res.userInfo) //将信息保存在状态机
        }     
   }
}
第二步:获取Code码

调用login()方法,获取code

const result2 = await uni.login()
                let query = {
                    userInfo:userInfo,
                    code:result2.code,
                    appId:'xxxxxxx',
                    appSecret:'xxxxxx'
       }
                

参数说明:

  • code:必传参数,后端需要通过 code 去获取用户的 openid;

  • userInfo:非必选参数,需要根据实际项目需求,看后端是否需要用户信息;

  • appId 和 appSecret:学习阶段需要传递,实际项目中不需要传递,这两个值会在后端直接设置好;

  • appId 和 appSecret 在“微信公众平台”中获取

第四步:在获取Code码后,调用request方法,获取token
const {data:{token}} = await uni.request({
            url:'http://www.sss.cn:3000/user/wxLogin',
            method:'POST',
            data:query,
  })
 this.saveToken(token)
第五步:将获取的Token保存在Vuex中
this.saveToken(token)

登录验证:

首先在user模块的状态机文件中编写actions的方法getUserInfoAsync来判断用户的token是否有效,如果无效直接跳到登录页面

actions:{
        getUserInfoAsync(context,payload){
            let token = {token:context.state.token};
            uni.request({
                url:"http://www.sssssss.cn:3000/user/getUserInfo",
                header:{
                    "Authorization":context.state.token
                },
                data:{token:context.state.token},
                success:(res)=>{
                    console.log('res',res);
                    if(res.statusCode == 401){
                        uni.showToast({
                            title:"token已经过期重新登录",
                            success() {
                                context.commit('saveUserInfo',{})
                                context.commit('removeToken','')
                                uni.switchTab({
                                    url:'/pages/mine/mine'
                                })
                            }
                        })
                    }
                }
            })
        }
    }

验证的时候也是调用uni.request()方法

Vuex中的2配置

export default {
    namespaced:true,
    state:{
        userMessage:JSON.parse(uni.getStorageSync('userInfo') || '{}'),
        token:uni.getStorageSync('token')||'',
    },
    mutations:{
        saveUserInfo(state,payload){
            state.userMessage = payload
            uni.setStorageSync('userInfo',JSON.stringify(payload))
        },
        saveToken(state,payload){
            state.token = payload
            uni.setStorageSync('token',payload)
        },
        removeToken(state){
            state.userMessage = {}
            state.token = ''
            uni.removeStorageSync('userInfo')
            uni.removeStorageSync('token')
        }
    },

注意

这里需要注意的是,在将用户信息保存在Vuex之前,先将用户的值赋给state的userInfo,否则,在组件调用Vuex时,会产生用户信息无法立即更新,这是因为在组件中调用的state时,是在computed计算属性中调用state,而computed是在页面创建的时候才会被触发,又因为,当点击登录按钮的时候,我们才将用户信息保存在Vuex中,在这之前Vuex都是空白的数据。所以当我们获取用户信息的时候我们在组件中将信息保存在Vuex中并且将信息赋给Vuex。

退出登录:
import {createNamespacedHelpers} from 'vuex'
const {mapMutations}=createNamespacedHelpers('user')
export default {
    name:"userinfo",
    methods:{
        ...mapMutations(['updateToken','updateUserInfo']),
        async logout(){
            const [err, succ] = await uni.showModal({
                title: '提示',
                content: '确认退出登录吗?'
            }).catch(err => err)
            if (succ && succ.confirm) {
                this.updateToken('')
                this.updateUserInfo({})
            }
        }
    }
]}

在components/userinfo/userinfo组件中完成用户的退出登录功能

作为AI,我无法为您提供具体的代码实现,但我可以为您提供一些关于uniapp小程序登录的基本信息和思路。 1. 用户登录的流程 用户需要在小程序界面中输入账号和密码,然后点击登录按钮。小程序将会将用户输入的账号和密码发送给后端服务器进行验证。如果账号和密码正确,后端服务器会返回一个令牌(token)给小程序小程序将该令牌保存在本地存储中。 2. 令牌的作用 令牌的作用是用于标识用户的身份,每个令牌都是唯一的。在用户进行其他操作时,小程序可以将令牌发送给后端服务器进行身份验证,以确保用户已登录并且有权限进行该操作。 3. 令牌的保存方式 小程序可以使用uniapp提供的本地存储(LocalStorage)来保存令牌。当用户登录成功后,令牌将被保存在LocalStorage中。当用户退出登录时,令牌将被从LocalStorage中删除。 4. 令牌的有效期 令牌的有效期是指令牌可以使用的时间范围。一般情况下,令牌的有效期为一段时间,比如30分钟或1小时。在有效期内,用户可以使用该令牌进行操作。当令牌过期时,用户需要重新登录以获取新的令牌。 5. 其他安全措施 为了保护用户的账号和密码不被泄露,小程序可以采取以下安全措施: - 使用HTTPS协议来保护数据传输过程中的安全性; - 对账号密码进行加密处理,以确保数据的隐私性; - 使用验证码等方式来防止恶意攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值