TestEShopDist/src/use/useLogin.ts
2022-05-09 18:52:08 +08:00

137 lines
4.8 KiB
TypeScript

import { useEffect, useState } from "react"
import { WX_APPID } from "@/common/constant"
import useUserInfo from "./useUserInfo"
import Taro, { useRouter } from "@tarojs/taro"
import { LoginApi } from "@/api/login"
import { GetWxUserInfoApi, GetAdminUserInfoApi } from "@/api/user"
import qs from 'qs';
export default () => {
const {setToken, setSessionKey, setUserInfo, setAdminUserInfo, userInfo} = useUserInfo()
useEffect(() => {
console.log('userInfo::',userInfo.token)
}, [userInfo])
const router = useRouter()
//登录请求
const {fetchData} = LoginApi()
//微信登录
const wxLogin = () => {
return new Promise((reslove, reject) => {
Taro.login({
success: async (res) => {
if (res.code) {
const {data, success, msg} = await fetchData({js_code: res.code})
if(success) {
console.log('token::',data.token)
setToken(data.token)
setSessionKey(data.session_key)
reslove(data)
let params = router.params
delete params.$taroTimestamp
console.log('params::',params)
if(router.path === '/pages/index/index' || router.path === '/pages/user/index') {
Taro.reLaunch({
url: router.path +'?' + qs.stringify(params)
})
} else {
Taro.redirectTo({
url: router.path +'?' + qs.stringify(params)
})
}
getAdminUserInfo()
//todo 删除本地授权用户信息,获取最新授权信息
} else {
Taro.showToast({
title:'登录失败',
icon:"none"
})
reject(msg)
}
} else {
console.log('登录失败!' + res.errMsg)
reject(res.errMsg)
}
},
fail: function(e) {
console.log('登录失败!::',e)
reject(e)
}
})
})
}
//获取用户信息
const {fetchData: useFetchData} = GetAdminUserInfoApi()
const getAdminUserInfo = async () => {
let res = await useFetchData()
setAdminUserInfo(res.data)
}
//登录加checkLogin检查
const checkLogin = () => {
return new Promise( async (reslove) => {
if(!userInfo.token) {
await wxLogin()
reslove(true)
} else {
Taro.checkSession({
success: async () => {
reslove(true)
},
fail: async () => {
await wxLogin()
reslove(true)
}
})
}
})
}
//获取用户头像等信息数据
const {fetchData: fetchDataUserInfo} = GetWxUserInfoApi()
const getSelfUserInfo = async () => {
return new Promise((reslove, reject) => {
if(!userInfo.userInfo) {
Taro.getUserProfile({
desc: '用于完善会员资料',
success: async (res) => {
if(!userInfo.session_key) {
await wxLogin()
}
const {data} = await fetchDataUserInfo({
session_key: userInfo.session_key,
raw_data: res.rawData,
signature: res.signature,
encrypted_data: res.encryptedData,
iv: res.iv
})
setUserInfo({...data})
reslove(data)
},
fail:(e) => {
reject(e)
}
})
} else {
reslove(true)
}
})
}
return {
checkLogin,
wxLogin,
getSelfUserInfo
}
}