auth.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. "use strict";
  2. const common_vendor = require("../common/vendor.js");
  3. const utils_api = require("./api.js");
  4. const TOKEN_KEY = "user_token";
  5. const USER_INFO_KEY = "user_info";
  6. const setToken = (token) => {
  7. common_vendor.index.setStorageSync(TOKEN_KEY, token);
  8. };
  9. const getToken = () => {
  10. return common_vendor.index.getStorageSync(TOKEN_KEY) || null;
  11. };
  12. const removeToken = () => {
  13. common_vendor.index.removeStorageSync(TOKEN_KEY);
  14. };
  15. const setUserInfo = (userInfo) => {
  16. common_vendor.index.setStorageSync(USER_INFO_KEY, JSON.stringify(userInfo));
  17. };
  18. const getUserInfo = () => {
  19. const userInfo = common_vendor.index.getStorageSync(USER_INFO_KEY);
  20. return userInfo ? JSON.parse(userInfo) : null;
  21. };
  22. const removeUserInfo = () => {
  23. common_vendor.index.removeStorageSync(USER_INFO_KEY);
  24. };
  25. const isLoggedIn = () => {
  26. return !!getToken();
  27. };
  28. const logout = () => {
  29. removeToken();
  30. removeUserInfo();
  31. };
  32. const wxSilentLogin = async (loginCode) => {
  33. try {
  34. console.log("[静默登录] 开始检查用户状态, code:", loginCode);
  35. const result = await utils_api.wxSilentLoginApi({ loginCode });
  36. console.log("[静默登录] 后端响应:", result);
  37. if (result.code === 200 && result.data.isSign === "true" && result.data.token) {
  38. setToken(result.data.token);
  39. console.log("[静默登录] 老用户登录成功");
  40. await fetchAndSaveUserInfo();
  41. }
  42. return result.data;
  43. } catch (error) {
  44. console.error("[静默登录] 失败:", error);
  45. throw error;
  46. }
  47. };
  48. const wxPhoneLogin = async (params) => {
  49. try {
  50. console.log("[手机号登录] 开始验证手机号");
  51. const result = await utils_api.wxPhoneLoginApi(params);
  52. console.log("[手机号登录] 后端响应:", result);
  53. if (result.code === 200 && result.data.isSign === "true" && result.data.token) {
  54. setToken(result.data.token);
  55. console.log("[手机号登录] 已注册用户登录成功");
  56. await fetchAndSaveUserInfo();
  57. }
  58. return result.data;
  59. } catch (error) {
  60. console.error("[手机号登录] 失败:", error);
  61. throw error;
  62. }
  63. };
  64. const wxCompleteUserInfo = async (userInfo) => {
  65. try {
  66. console.log("[完善信息] 提交用户信息");
  67. const result = await utils_api.wxCompleteUserInfoApi(userInfo);
  68. console.log("[完善信息] 后端响应:", result);
  69. if (result.code === 200 && result.data.token) {
  70. setToken(result.data.token);
  71. console.log("[完善信息] 注册成功");
  72. await fetchAndSaveUserInfo();
  73. return true;
  74. } else {
  75. throw new Error(result.message || "注册失败");
  76. }
  77. } catch (error) {
  78. console.error("[完善信息] 失败:", error);
  79. throw error;
  80. }
  81. };
  82. const fetchAndSaveUserInfo = async () => {
  83. try {
  84. const result = await utils_api.getUserInfoApi();
  85. if (result.code === 200 && result.data) {
  86. setUserInfo(result.data);
  87. console.log("[用户信息] 获取成功");
  88. }
  89. } catch (error) {
  90. console.error("[用户信息] 获取失败:", error);
  91. }
  92. };
  93. const checkLogin = (callback) => {
  94. if (isLoggedIn()) {
  95. return true;
  96. }
  97. common_vendor.index.showModal({
  98. title: "登录提示",
  99. content: '此功能需要登录后使用,请点击"立即登录"按钮进行授权',
  100. showCancel: false,
  101. confirmText: "我知道了"
  102. });
  103. return false;
  104. };
  105. exports.checkLogin = checkLogin;
  106. exports.getUserInfo = getUserInfo;
  107. exports.isLoggedIn = isLoggedIn;
  108. exports.logout = logout;
  109. exports.setUserInfo = setUserInfo;
  110. exports.wxCompleteUserInfo = wxCompleteUserInfo;
  111. exports.wxPhoneLogin = wxPhoneLogin;
  112. exports.wxSilentLogin = wxSilentLogin;