Blame view

member-miniapp/utils/auth.js 1.83 KB
e1dcb3a0   “wangming”   1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
  // 登录态与微信登录封装
  import { TOKEN_KEY, MEMBER_KEY } from '@/utils/config'
  import { login as loginApi } from '@/api/mall'
  
  export function getToken() {
    return uni.getStorageSync(TOKEN_KEY) || ''
  }
  
  export function setToken(token) {
    if (token) uni.setStorageSync(TOKEN_KEY, token)
  }
  
  export function getMember() {
    return uni.getStorageSync(MEMBER_KEY) || null
  }
  
  export function setMember(member) {
    if (member) uni.setStorageSync(MEMBER_KEY, member)
  }
  
  export function clearAuth() {
    uni.removeStorageSync(TOKEN_KEY)
    uni.removeStorageSync(MEMBER_KEY)
  }
  
  export function isLogin() {
    return !!getToken()
  }
  
  /**
   * 微信登录:uni.login  code  调后端 Login   token  member
   * @param {Object} profile 可选 { nickName, avatar }
   * @returns {Promise<Object>} 登录结果 { token, member }
   */
  export function wechatLogin(profile = {}) {
    return new Promise((resolve, reject) => {
      uni.login({
        provider: 'weixin',
        success: (res) => {
          if (!res || !res.code) {
            reject(new Error('微信登录失败:未获取到 code'))
            return
          }
          const payload = { code: res.code }
          if (profile.nickName) payload.nickName = profile.nickName
          if (profile.avatar) payload.avatar = profile.avatar
  
          loginApi(payload)
            .then((data) => {
              if (data && data.token) {
                setToken(data.token)
                if (data.member) setMember(data.member)
              }
              resolve(data)
            })
            .catch(reject)
        },
        fail: (err) => reject(err)
      })
    })
  }
  
  /**
   * 确保已登录:已有 token 直接返回;否则静默微信登录
   * @returns {Promise<Object>}
   */
  export function ensureLogin() {
    if (isLogin()) {
      return Promise.resolve({ token: getToken(), member: getMember() })
    }
    return wechatLogin()
  }