前言
欢迎大佬指正思路。
由于最近面试时,被问到了这种问题,但是我回答的含糊不清。 虽然以前做过这些功能,但是一直都没有去总结和记录,所以我决定回顾一下并记录下来。
只记录思路
正文
uniapp
首先,默认已经准备好小程序 appid 等相关内容。
- 给 标签 一个 @click 并绑定一个函数
signIn ,如下。
<template>
<view>
<view @click="signIn">登录<view>
</view>
</template>
<script>
export default {
data () {
return {}
},
methods: {
signIn() {
uni.getUserProfile({
desc: '注册',
success: (data) => {
console.log(data)
uni.login({
provider: 'weixin',
success: (res) => {
uni.request({
url: '192.168.1.99:1234/api/signIn',
method: 'POST',
data: {
nickname: data.userInfo.nickName,
avatarUrl: data.userInfo.avatarUrl,
code: res.code
},
success: (res) => {},
fail: (err) => {}
})
}
})
}
})
}
}
}
</script>
后端
后端使用 nodejs(koa) 框架
const koaRequest = require('request');
async signIn(ctx, next) {
const { nickname, avatarUrl, code } = ctx.request.body
try {
const res = await getOpenid(code)
} catch (err) {}
}
function getOpenid(code) {
return new Promise((resolve, reject) => {
koaRequest({
url: 'https://api.weixin.qq.com/sns/jscode2session',
qs: {
appid: 'wx1234564789465465',
secret: 'q1w2e3r4t5y6u7i8o9p',
js_code: code,
grant_type: "client_credential",
}, (err, response, data) => {
if (err) reject(err)
resolve(data)
}
})
})
}
|