跳到主要内容

登录认证

目前 Cloudbase Flutter 支持的登录方式有:

  • 微信授权登录(微信开放平台的移动应用授权)
  • 自定义登录
  • 匿名登录

开发者需要在初始化资源后即调用登录授权方法,登录成功后即可调用 CloudBase Flutter 提供的功能插件。

获取登录对象#

示例代码#

import 'package:cloudbase_core/cloudbase_core.dart';import 'package:cloudbase_auth/cloudbase_auth.dart';
// 初始化CloudBaseCore core = CloudBaseCore.init({    'env': 'your-env-id',    'appAccess': {      'key': 'your-app-access-key',      'version': 'your-app-access-version'    }});
// 获取登录对象CloudBaseAuth auth = CloudBaseAuth(core);

获取登录状态#

开发者可以通过 getAuthState() 来获取当前的登录状态,调用 getAuthState() 后,SDK 会识别本地是否有登录状态,如果有,则会尝试刷新登录状态,若刷新登录状态成功,则会返回新的登录状态,否则返回 null

请求参数#

示例代码#

import 'package:cloudbase_core/cloudbase_core.dart';import 'package:cloudbase_auth/cloudbase_auth.dart';
// 初始化CloudBaseCore core = CloudBaseCore.init({    'env': 'your-env-id',    'appAccess': {      'key': 'your-app-access-key',      'version': 'your-app-access-version'    }});
// 获取登录对象CloudBaseAuth auth = CloudBaseAuth(core);
// 获取登录状态await auth.getAuthState().then((authState) {    if (authState != null) {        // 登录态有效    } else {        // 没有登录态,或者登录态已经失效    }})

微信授权登录#

申请和绑定微信 Appid#

[1] 请到 微信开放平台 进行登记,登记并选择移动应用进行设置后,将该应用提交审核,审核通过后获得 Appid

[2] 在 云开发控制台 绑定微信开放平台的 Appid ,并启动该登录方式。

添加 Android 配置#

[1] 在 微信开放平台-管理中心-应用详情 配置 Android 开发信息: 包名和应用签名。

应用签名可以使用微信开放平台提供的 签名生成工具

[2] 在您的包名相应目录下新建一个 wxapi 目录,并在该 wxapi 目录下新增一个 WXEntryActivity 类,该类继承自 Activity

[3] WXEntryActivity 类的代码如下:

package com.tcloudbase.fluttersdk.demo.wxapi;
import android.app.Activity;import android.os.Bundle;import androidx.annotation.Nullable;
public class WXEntryActivity extends Activity {
  @Override  protected void onCreate(@Nullable Bundle savedInstanceState) {    super.onCreate(savedInstanceState);  }}

[4] 在 Android 项目的 manifest 文件里面加上:

<activity  android:name=".wxapi.WXEntryActivity"  android:theme="@android:style/Theme.Translucent.NoTitleBar"  android:exported="true"  android:taskAffinity="net.sourceforge.simcpux"  android:launchMode="singleTask"></activity>

添加 iOS 配置#

[1] 配置应用的 Universal Links

[1.1] 根据苹果文档配置您应用的 Universal Links

[1.2] 打开 Associated Domains 开关,将 Universal Links 域名加到配置上。

[2] 在 微信开放平台-管理中心-应用详情 配置 iOS 开发信息: Bundle IDUniversal Links

[3] 在 Xcode 中,选择您的工程设置项,选中 TARGETS 一栏,在 Info 标签栏的 URL Types 添加 URL Schemes 为您所注册的 Appid

[4] 在 Xcode 中,选择您的工程设置项,选中 TARGETS 一栏,在 Info 标签栏的 LSApplicationQueriesSchemes 添加 weixinweixinULAPI

在 Flutter 端使用 wxAppid 和 wxUniLink 登录#

import 'package:cloudbase_core/cloudbase_core.dart';import 'package:cloudbase_auth/cloudbase_auth.dart';
// 初始化CloudBaseCore core = CloudBaseCore.init({    'env': 'your-env-id',    'appAccess': {      'key': 'your-app-access-key',      'version': 'your-app-access-version'    }});
// 获取登录对象CloudBaseAuth auth = CloudBaseAuth(core);
// 获取登录状态CloudBaseAuthState authState = await auth.getAuthState();
// 唤起微信登录if (authState == null) {    await auth.signInByWx(wxAppId, wxUniLink).then((success) {        // 登录成功    }).catchError((err) {        // 登录失败    });}

自定义登录#

CloudBase 允许开发者使用特定的登录凭据 Ticket 对用户进行身份认证。开发者可以使用服务端 SDK 来创建 Ticket,并且将 JWT 传入到 Flutter 应用内,然后调用 signInWithTicket() 获得 CloudBase 的登录态。

获取私钥文件#

登录腾讯云云开发控制台,在环境设置页面中,点击“登录设置”,然后生成并下载私钥

云开发下载私钥

使用私钥文件#

获取私钥文件之后,在服务端 SDK 初始化时,加入私钥文件的路径:

// 开发者的服务端代码// 初始化示例const tcb = require("@cloudbase/node-sdk");
// 1. 直接使用下载的私钥文件const app = tcb.init({  // ...  env: "your-env-id",  credentials: require("/path/to/your/tcb_custom_login.json")});
// 2. 也可以直接传入私钥的内容const app = tcb.init({  // ...  env: "your-env-id",  credentials: {    private_key_id: "xxxxxxxxxxxxx",    private_key: "xxxxxxxxxxx"  }});

使用服务端 SDK 创建登录凭据 Ticket#

服务端 SDK 内置了生成 Ticket 的接口,开发者需要提供一个自定义的 customUserId 作为用户的唯一身份标识。Ticket 有效期为 5 分钟,过期则失效。

每个用户的 customUserId 不能相同,每次用户重新登录时,原有的登录态将会失效。

let customUserId = "123456";
const ticket = app.auth().createTicket(customUserId, {  refresh: 10 * 60 * 1000 // 每十分钟刷新一次登录态, 默认为一小时});// 然后把 ticket 发送给 Flutter 端

Flutter 端上使用 Ticket 登录#

创建 Ticket 之后,开发者应将 Ticket 发送至 Flutter 端,然后使用 Flutter SDK 提供的 signInWithTicket() 登录 CloudBase:

import 'package:cloudbase_core/cloudbase_core.dart';import 'package:cloudbase_auth/cloudbase_auth.dart';
// 初始化CloudBaseCore core = CloudBaseCore.init({    'env': 'your-env-id',    'appAccess': {      'key': 'your-app-access-key',      'version': 'your-app-access-version'    }});
// 获取登录对象CloudBaseAuth auth = CloudBaseAuth(core);
// 获取登录状态CloudBaseAuthState authState = await auth.getAuthState();
// 唤起自定义登录if (authState == null) {    await auth.signInWithTicket(ticket).then((success) {        // 登录成功    }).catchError((err) {        // 登录失败    });}

匿名登录#

CloudBase 允许开发者启用匿名登录模式,在没有用户身份认证的情况下使用 CloudBase 资源。开发者调用 signInAnonymously() 即可获得 CloudBase 的登录态。

启用匿名登录模式#

登录腾讯云云开发控制台,在环境设置页面中,点击“登录设置”,然后启用匿名登录

/>

在 Flutter 端调用匿名登录#

import 'package:cloudbase_core/cloudbase_core.dart';import 'package:cloudbase_auth/cloudbase_auth.dart';
// 初始化CloudBaseCore core = CloudBaseCore.init({    'env': 'your-env-id',    'appAccess': {      'key': 'your-app-access-key',      'version': 'your-app-access-version'    }});
// 获取登录对象CloudBaseAuth auth = CloudBaseAuth(core);
// 获取登录状态CloudBaseAuthState authState = await auth.getAuthState();
// 唤起匿名登录if (authState == null) {    await auth.signInAnonymously().then((success) {        // 登录成功    }).catchError((err) {        // 登录失败    });}

获取用户信息#

任何方式登录成功后,可以调用 getUserInfo 获得用户的 Cloudbase 身份信息。

请求参数#

响应参数#

字段类型是否必备说明
uuidString用户在云开发的唯一 ID
envString用户使用的云开发环境
loginTypeString用户登录类型
appidString微信(开放平台或公众平台)应用 appid
openidString当前用户在微信(开放平台或公众平台)应用的 openid
nickNameString用户昵称
genderString用户性别,male(男)或 female(女)
countryString用户所在国家
provinceString用户所在省份
cityString用户所在城市
avatarUrlString用户头像链接

示例代码#

import 'package:cloudbase_core/cloudbase_core.dart';import 'package:cloudbase_auth/cloudbase_auth.dart';
// 初始化CloudBaseCore core = CloudBaseCore.init({    'env': 'your-env-id',    'appAccess': {      'key': 'your-app-access-key',      'version': 'your-app-access-version'    }});
// 获取登录对象CloudBaseAuth auth = CloudBaseAuth(core);
// 获取登录状态CloudBaseAuthState authState = await auth.getAuthState();
// 获取用户信息if (authState != null) {    await auth.getUserInfo().then((userInfo) {        // 获取用户信息成功    }).catchError((err) {        // 获取用户信息失败    });}

退出登录#

请求参数#

示例代码#

import 'package:cloudbase_core/cloudbase_core.dart';import 'package:cloudbase_auth/cloudbase_auth.dart';
// 初始化CloudBaseCore core = CloudBaseCore.init({    'env': 'your-env-id',    'appAccess': {      'key': 'your-app-access-key',      'version': 'your-app-access-version'    }});
// 获取登录对象CloudBaseAuth auth = CloudBaseAuth(core);
// 退出登录await auth.signOut();