137 lines
4.8 KiB
TypeScript
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
|
|
}
|
|
}
|