Skip to content

showLogin

微信登录,根据编译平台自动选择对应的登录实现。

前置依赖

依赖参数

参数名类型说明
deps.loginUniApp['login']登录 API
deps.getUserInfoUniApp['getUserInfo']获取用户信息 API(可选,App端使用)
deps.getProviderUniApp['getProvider']获取服务提供商 API(可选,用于检查支持)
deps.detectEnvironment() => 'h5' | 'miniapp' | 'app' | 'unknown'检测环境函数(可选)
deps.logConsole['log']日志输出
deps.errorConsole['error']错误输出

环境要求

  • UniApp环境: 使用UniApp API,支持小程序、App端
  • 注意: H5端不支持微信登录

函数签名

typescript
function showLogin(
  options?: LoginOptions,
  deps: ShowLoginDeps
): Promise<LoginResult>

interface ShowLoginDeps {
  login: UniApp['login']
  getUserInfo?: UniApp['getUserInfo']
  getProvider?: UniApp['getProvider']
  detectEnvironment?: () => 'h5' | 'miniapp' | 'app' | 'unknown'
  log: Console['log']
  error: Console['error']
}

interface LoginOptions {
  provider?: 'weixin' | 'qq' | 'sinaweibo' | 'xiaomi' | 'alipay' | 'baidu' | 'toutiao' | 'douyin'
  extraData?: Record<string, unknown>
}

interface LoginResult {
  errMsg?: string
  code?: string
  userInfo?: {
    nickName?: string
    avatarUrl?: string
    [key: string]: unknown
  }
  raw?: unknown
}

参数

参数名类型必填默认值说明
optionsLoginOptions{}登录选项
options.providerstring'weixin'登录服务提供商
depsShowLoginDeps-依赖注入对象

返回值

类型说明
Promise<LoginResult>Promise,成功时返回登录结果,主要包含 code(用于换取 openid/unionid)

工作原理

  1. 环境检测:根据 detectEnvironment 函数检测当前运行环境
  2. 平台适配
    • 小程序端:使用 uni.login 获取 code
    • App端:使用 uni.login 获取 code,并可选择同时获取用户信息
    • H5端:不支持,直接返回错误
  3. 获取 code:调用登录接口获取临时登录凭证 code
  4. 返回结果:返回包含 code 的登录结果,开发者需要将 code 发送到后端换取 openid/unionid

重要提示:自2022年10月25日后,getUserProfile 接口已被收回。小程序端只能获取 code,用户头像和昵称需要使用「头像昵称填写能力」单独获取。