215 lines
5.2 KiB
JavaScript
215 lines
5.2 KiB
JavaScript
import { PLATFORM,BASE_URL } from "./config";
|
||
|
||
const LOGIN_API = '/third-user/program/login';
|
||
function getLoginUrl() {
|
||
console.log("------login url------:",BASE_URL)
|
||
return BASE_URL+LOGIN_API
|
||
}
|
||
|
||
// 静默登录(自动获取token)
|
||
export const silentLogin = async () => {
|
||
try {
|
||
// 1. 检查本地token
|
||
const token = getLocalToken();
|
||
if (token) {
|
||
return token;
|
||
}
|
||
|
||
console.log("静默登录",token)
|
||
// 2. 执行平台静默登录
|
||
let data;
|
||
if (PLATFORM === 'mp-weixin') {
|
||
data = await wxSilentLogin();
|
||
} else if (PLATFORM === 'mp-kuaishou') {
|
||
data = await ksSilentLogin();
|
||
} else {
|
||
// 待处理
|
||
throw new Error("当前平台不支持")
|
||
}
|
||
|
||
// 3. 保存token
|
||
if (data) {
|
||
console.log("静默登录-----",data.token)
|
||
saveLocalToken(data.token);
|
||
saveUserInfo(data.user)
|
||
uni.$emit('LOGIN_SUCCESS', { token: data.token });
|
||
return data.token;
|
||
}
|
||
|
||
throw new Error('静默登录失败');
|
||
} catch (error) {
|
||
console.error('静默登录失败:', error);
|
||
throw error;
|
||
}
|
||
};
|
||
|
||
// 微信小程序静默登录
|
||
const wxSilentLogin = async () => {
|
||
try {
|
||
// 1. 获取微信code
|
||
const loginRes = await new Promise((resolve, reject) => {
|
||
uni.login({
|
||
provider: 'weixin',
|
||
success: resolve,
|
||
fail: reject
|
||
});
|
||
});
|
||
|
||
// 2. 获取小程序appId
|
||
const accountInfo = uni.getAccountInfoSync();
|
||
const appId = accountInfo.miniProgram.appId;
|
||
|
||
// 3. 发送登录请求并等待响应
|
||
const response = await new Promise((resolve, reject) => {
|
||
uni.request({
|
||
url: getLoginUrl(),
|
||
method: 'POST',
|
||
data: {
|
||
appid: appId,
|
||
code: loginRes.code,
|
||
},
|
||
success: (res) => {
|
||
if (res.statusCode === 200) {
|
||
console.log("login success",res)
|
||
resolve(res.data);
|
||
} else {
|
||
reject(new Error(`请求失败: ${res.statusCode}`));
|
||
}
|
||
},
|
||
fail: reject
|
||
});
|
||
});
|
||
|
||
// 4. 处理登录响应
|
||
if (response.code === 200) {
|
||
return response.data;
|
||
}
|
||
|
||
throw new Error(response.msg || '微信登录失败');
|
||
} catch (error) {
|
||
console.error('微信静默登录失败:', error);
|
||
throw error;
|
||
}
|
||
};
|
||
|
||
// 快手小程序静默登录
|
||
const ksSilentLogin = async () => {
|
||
try {
|
||
// 1. 获取快手code
|
||
const loginRes = await new Promise((resolve, reject) => {
|
||
uni.login({
|
||
provider: 'kuaishou',
|
||
success: resolve,
|
||
fail: reject
|
||
});
|
||
});
|
||
|
||
// 2. 发送登录请求
|
||
let url = getLoginUrl()
|
||
console.log("login:",url)
|
||
|
||
console.log("ksSilentLogin------",loginRes)
|
||
const accountInfo = uni.getAccountInfoSync();
|
||
const appId = accountInfo.miniProgram.appId;
|
||
console.log("appid:",appId)
|
||
|
||
// 2. 发送登录请求
|
||
const res = await new Promise((resolve, reject) => {
|
||
uni.request({
|
||
url: getLoginUrl(),
|
||
method: 'POST',
|
||
data: {
|
||
appid: appId,
|
||
code: loginRes.code,
|
||
},
|
||
success: (res) => {
|
||
if (res.statusCode === 200) {
|
||
console.log("login success",res)
|
||
resolve(res.data);
|
||
} else {
|
||
reject(new Error(`请求失败: ${res.statusCode}`));
|
||
}
|
||
},
|
||
fail: reject
|
||
});
|
||
});
|
||
|
||
// 3. 返回token
|
||
if (res.code === 0) {
|
||
return res.data;
|
||
}
|
||
|
||
throw new Error(res.msg || '快手登录失败');
|
||
} catch (error) {
|
||
console.error('快手静默登录失败:', error);
|
||
throw error;
|
||
}
|
||
};
|
||
|
||
// 获取本地token
|
||
const getLocalToken = () => {
|
||
const tokenKey = PLATFORM === 'mp-weixin' ? 'wx_token' : 'ks_token';
|
||
return uni.getStorageSync(tokenKey);
|
||
};
|
||
|
||
// 保存本地token
|
||
const saveLocalToken = (token) => {
|
||
const tokenKey = PLATFORM === 'mp-weixin' ? 'wx_token' : 'ks_token';
|
||
uni.setStorageSync(tokenKey, token);
|
||
};
|
||
|
||
// 保存用户信息
|
||
const saveUserInfo = (user) => {
|
||
uni.setStorageSync('user-info', user);
|
||
};
|
||
|
||
// 获取用户信息(需要授权)
|
||
export const getUserInfo = async () => {
|
||
try {
|
||
const res = await new Promise((resolve, reject) => {
|
||
uni.getUserInfo({
|
||
provider: PLATFORM === 'mp-weixin' ? 'weixin' : 'kuaishou',
|
||
success: resolve,
|
||
fail: reject
|
||
});
|
||
});
|
||
|
||
return res.userInfo;
|
||
} catch (error) {
|
||
console.error('获取用户信息失败:', error);
|
||
return null;
|
||
}
|
||
};
|
||
|
||
// 登出
|
||
export const logout = () => {
|
||
const tokenKey = PLATFORM === 'mp-weixin' ? 'wx_token' : 'ks_token';
|
||
uni.removeStorageSync(tokenKey);
|
||
};
|
||
|
||
// 检查登录状态
|
||
export const checkLoginStatus = async () => {
|
||
try {
|
||
const token = getLocalToken();
|
||
if (!token) return false;
|
||
console.log("tokenInfo:",token)
|
||
return true;
|
||
} catch (error) {
|
||
return false;
|
||
}
|
||
};
|
||
|
||
// 初始化登录状态
|
||
export const initLogin = async () => {
|
||
try {
|
||
console.log("初始化登录 开始。。。")
|
||
const isLoggedIn = await checkLoginStatus();
|
||
if (!isLoggedIn) {
|
||
await silentLogin();
|
||
}
|
||
return true;
|
||
} catch (error) {
|
||
console.error('初始化登录失败:', error);
|
||
return false;
|
||
}
|
||
}; |