Официальный метод входа в апплет WeChat был изменен, и для входа в систему необходимо нажать кнопку и поделиться с вами своим решением.
Первоначальная логика входаЗарегистрируйте метод глобального входа.В методе входа сначала вызовите wx.login для входа в систему без вывода сообщений, получите временный код учетных данных для входа, вызовите API в фоновом режиме сервера разработчика и замените код на openid и session_key. Затем вызовите wx.getUserInfo, чтобы получить информацию о пользователе.
Текущая логика реализацииЭто написать страницу передачи кнопки, войти в апплет wx.getUserInfo и перейти на страницу передачи кнопки после неудачного ее получения, нажать кнопку для вызоваbindgetuserinfoметод, подробные данные, возвращаемые этим методом, согласуются с информацией, возвращаемой методом wx.getUserInfo, и в это время также может быть получена информация о пользователе. После успешного обратного вызова wx.navigateBack({}) возвращается на исходную страницу.
Вот несколько идей:
async bindGetUserInfo(event) {
const { detail } = event;
const isSuccess = detail.errMsg === 'getUserInfo:ok';
if (isSuccess) {
this.authSuccess(detail);
return;
}
// 用户拒绝授权
// wx.navigateBack({});
}
async authSuccess(detail) {
await this.getToken(detail);
wx.navigateBack({});
// this.nextHander();
}
保存用户信息
async getToken(detail) {
console.log('getToken', detail);
const session_key = wx.getStorageSync('session_key');
const { encryptedData: encrypted_data, iv } = detail;
const that = this;
// 保存用户信息到服务器
const { data: { user, up_token, token, is_created } } = await this.fetch({
url: '/xxx/',
data: {
session_key,
encrypted_data,
iv,
},
method: 'POST',
});
wx.setStorageSync('user', user);
this.$root.$parent.store.set('up_token', up_token, 30);
// 存储用户标识符到本地
this.$root.$parent.store.set('token', token, 30);
this.$root.$parent.store.set('is_created', is_created, 30);
// redux
// store.dispatch({
// type: 'SET_IS_CREATED',
// payload: is_created,
// });
}
Счастливый рефакторинг заканчивается соусом~