Taro 小程序开发大型实战(三):实现微信和支付宝多端登录

欢迎继续阅读《Taro 小程序开发大型实战》系列,前情回顾:

而在这一篇中,我们将实现微信和支付宝多端登录。如果你希望直接从这一篇开始,请运行以下命令:

git clone -b third-part https://github.com/tuture-dev/ultra-club.git
cd ultra-club

本文所涉及的源代码都放在了Github 上,如果您觉得我们写得还不错,希望您能给️这篇文章点赞+Github仓库加星️哦~

在正式开始之前,我们希望你已经具备以下知识:

  • 基本的 React 框架知识,可参考这篇文章进行学习
  • 对常用的 React Hooks (useStateuseEffect)有所了解,后面图雀社区将推出 “一杯茶的时间,上手 React Hooks”,敬请期待!

除此之外,你还需要下载并安装支付宝开发者工具,登录后创建自己的小程序 ID。

多端登录,群魔乱舞

与普通的 Web 应用相比,小程序能够在所在的平台实现一键登录,非常方便。这一步,我们也将实现多端登录(主要包括微信登录和支付宝登录)。之所以标题取为“群魔乱舞”,不仅受了“震惊”小编们的启发,也是因为当今各平台处理登录和鉴权的方式差异很大,很遗憾的是在 Taro 框架下我们依然需要踩很多“坑”才能真正实现“多端登录”。

准备工作

组件设计规划

这一节的代码很长,在正式开始之前我们先查看一下组件设计的规划,便于你对接下来我们要做的工作有清晰的了解。

可以看到“我的”页面整体拆分成了 HeaderFooter

  • Header 包括 LoggedMine(个人信息),如果在未登录状态下则还有 LoginButton(普通登录按钮)、WeappLoginButton(微信登录按钮,仅在微信小程序中出现)以及 AlipayLoginButton(支付宝登录按钮,仅在支付宝小程序中出现)
  • Footer 则用来显示是否已登录的文字,在已登录的情况下会显示 Logout(退出登录按钮)
配置 Babel 插件

从这一步开始,我们将首次开始写异步代码。本项目将采用流行的 async/await 来编写异步逻辑,因此我们配置一下相应的 Babel 插件:

npm install babel-plugin-transform-runtime --save-dev
# yarn add babel-plugin-transform-runtime -D

然后在 config/index.js 中为 config.babel.plugins 添加相应的配置如下:

const config = {
  // ...
  babel: {
    // ...
    plugins: [
      // ...
      [
        'transform-runtime',
        {
          helpers: false,
          polyfill: false,
          regenerator: true,
          moduleName: 'babel-runtime',
        },
      ],
    ],
  },
  // ...
}

// ...

各组件的实现

实现 LoginButton

首先,我们来实现普通登录按钮 LoginButton 组件。创建 src/components/LoginButton 目录,在其中创建 index.js,代码如下:

import Taro from '@tarojs/taro'
import { AtButton } from 'taro-ui'

export default function LoginButton(props) {
  return (
    <AtButton type="primary" onClick={props.handleClick}>
      普通登录
    </AtButton>
  )
}

我们使用了 Taro UI 的 AtButton 组件,并定义了一个 handleClick 事件,后面在使用时会传入。

实现 WeappLoginButton

接着我们实现微信登录按钮 WeappLoginButton。创建 src/components/WeappLoginButton 目录,在其中分别创建 index.jsindex.scssindex.js 代码如下:

import Taro, { useState } from '@tarojs/taro'
import { Button } from '@tarojs/components'

import './index.scss'

export default function LoginButton(props) {
  const [isLogin, setIsLogin] = useState(false)

  async function onGetUserInfo(e) {
    setIsLogin(true)

    const { avatarUrl, nickName } = e.detail.userInfo
    await props.setLoginInfo(avatarUrl, nickName)

    setIsLogin(false)
  }

  return (
    <Button
      openType="getUserInfo"
      onGetUserInfo={onGetUserInfo}
      type="primary"
      className="login-button"
      loading={isLogin}
    >
      微信登录
    </Button>
  )
}

可以看到,微信登录按钮和之前的普通登录按钮多了很多东西:

  • 添加了 isLogin 状态,用于表示是否在等待登录中,以及修改状态的 setIsLogin 函数
  • 实现了 onGetUserInfo async 函数,用于处理在用户点击登录按钮、获取到信息之后的逻辑。其中,我们将获取到的用户信息传入 props 中的 setLoginInfo,从而修改整
  • 29
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现taro微信小程序登录,你需要做以下几步: 1.在微信公众平台注册小程序并获取小程序AppID。 2.在小程序中使用微信登录授权组件,用户点击授权按钮后,获取到用户的授权信息,包括用户的openid和session_key。 3.将用户的openid和session_key发送给后端服务器进行验证。后端服务器可以使用微信提供的接口校验用户信息是否正确,同时可以自己进行逻辑处理,例如将用户信息存储到数据库中,生成token等。 4.后端服务器返回校验结果给小程序,小程序根据结果进行相应的处理,例如跳转到主页或者提示用户登录失败等。 需要注意的是,用户的openid和session_key是敏感信息,需要加密传输和存储,以保证用户信息的安全性。 ### 回答2: taro是一种开发工具,用于创建小程序,而微信小程序是一种在微信平台上运行的应用程序。要在taro实现微信小程序的登录功能,可以按照以下步骤进行操作。 首先,在小程序的app.js文件中引入taro框架和相关组件,然后在页面页面代码中引入taro的按钮组件,用于触发登录事件。 然后,在小程序的配置文件app.json中配置登录所需的权限,例如获取用户信息的权限等。 接下来,在小程序的登录页面中,可以使用taro提供的登录API,调用微信登录接口,获取到用户的临时登录凭证code。 然后,将code发送给后端服务器,并使用code调用微信提供的接口,获取到用户的唯一标识openid和用户的会话秘钥sessionKey。 在获取到用户的openid后,可以根据业务需求将用户的信息存储到数据库中,或者进行进一步的用户信息获取和个性化设置。 最后,在小程序中进行用户登录状态的管理,可以使用taro的状态管理工具,在登录成功后将用户的登录状态设置为已登录,并在需要验证登录状态的页面中进行判断。 总之,通过在taro框架下对微信小程序登录流程进行处理,可以实现用户登录和身份验证功能,为用户提供更便捷、安全的使用体验。 ### 回答3: taro是一种多端开发框架,可以用于开发微信小程序。使用taro开发微信小程序登录功能的具体步骤如下: 1. 首先,在taro项目中创建一个登录页面,可以使用taro提供的组件进行布局和样式设置。 2. 在登录页面的按钮事件中,调用微信小程序提供的wx.login()方法,获取用户的登录凭证code。 3. 将获取到的code发送至后台服务器,后台服务器可以通过code向微信服务器发送请求,获取用户唯一标识的openid和会话密钥session_key。 4. 后台服务器可以保存用户openid和session_key,在后续请求中使用。 5. 用户登录成功后,可以将openid通过wx.setStorage()方法保存在微信小程序本地缓存中,用于后续判断用户是否已登录。 6. 在其他页面中,可以通过wx.getStorage()方法获取保存在本地缓存中的openid,判断用户是否已登录。 7. 登录成功后,可以根据业务需求进行相应的页面跳转或数据展示。 需要注意的是,在开发过程中需要将taro编译成微信小程序的语法,可以使用taro的命令行工具进行编译。另外,用户的敏感信息(如openid、session_key等)需要进行合理的保护和加密,以确保用户信息的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值