微信小程序用户登录代码
以下是微信小程序用户登录的代码示例:
在app.js中定义全局变量
App({
globalData: {
userInfo: null
}
})
在登录页面的js文件中编写登录函数
// 获取应用实例
const app = getApp()
Page({
data: {
canIUse: wx.canIUse('button.open-type.getUserInfo')
},
onLoad: function () {
if (app.globalData.userInfo) {
this.setData({
userInfo: app.globalData.userInfo,
hasUserInfo: true
})
} else if (this.data.canIUse) {
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.userInfoReadyCallback = res => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
} else {
// 在没有 open-type=getUserInfo 版本的兼容处理
wx.getUserInfo({
success: res => {
app.globalData.userInfo = res.userInfo
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
}
},
getUserInfo: function (e) {
console.log(e)
app.globalData.userInfo = e.detail.userInfo
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
}
})
在登录页面的wxml文件中添加登录按钮
<view class="container">
<view class="userinfo">
<button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo">获取头像昵称</button>
<block wx:if="{{hasUserInfo}}">
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</block>
</view>
</view>
在app.json文件中添加权限设置
{
"pages": [
"pages/index/index",
"pages/logs/logs",
"pages/login/login"
],
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle": "black"
},
"tabBar": {
"list": [{
"pagePath": "pages/index/index",
"text": "首页"
}, {
"pagePath": "pages/logs/logs",
"text": "日志"
}]
},
"permission": {
"scope.userLocation": {
"desc": "你的位置信息将用于小程序位置接口的效果展示"
}
}
}
以上就是微信小程序用户登录的代码示例,可以根据实际需求进行修改和完善。
在登录页面的wxss文件中添加样式
.container {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
height: 100vh;
}
.userinfo {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.userinfo-avatar {
width: 128rpx;
height: 128rpx;
border-radius: 50%;
margin-bottom: 16rpx;
}
.userinfo-nickname {
font-size: 28rpx;
}
在app.js中添加登录函数
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
wx.request({
url: 'https://example.com/login',
data: {
code: res.code
},
success: res => {
// 登录成功,保存用户信息到全局变量
app.globalData.userInfo = res.data.userInfo
// 跳转到首页
wx.switchTab({
url: '/pages/index/index',
})
}
})
}
})
在后台服务器中处理登录请求,获取用户信息并返回给小程序
// 登录接口
app.post('/login', async (req, res) => {
const { code } = req.body
const { openid, session_key } = await getOpenidAndSessionKey(code)
const userInfo = await getUserInfo(openid)
res.json({
openid,
session_key,
userInfo
})
})
// 获取openid和session_key
function getOpenidAndSessionKey(code) {
return new Promise((resolve, reject) => {
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session',
data: {
appid: 'your appid',
secret: 'your secret',
js_code: code,
grant_type: 'authorization_code'
},
success: res => {
resolve(res.data)
},
fail: err => {
reject(err)
}
})
})
}
// 获取用户信息
function getUserInfo(openid) {
return new Promise((resolve, reject) => {
// 根据openid从数据库中获取用户信息
// 如果用户不存在,则创建一个新用户并返回
// 如果用户存在,则返回用户信息
resolve({
nickname: '小明',
avatarUrl: 'https://example.com/avatar.jpg'
})
})
}
以上就是微信小程序用户登录的完整代码示例,包括前端和后端的代码。需要注意的是,实际开发中还需要考虑用户授权、登录态维护、安全性等问题,需要根据实际情况进行完善。