Authing 知识库
🛠 开发资源🥂 集成案例🔭 常见问题🖥 控制台
3.0.0
3.0.0
  • 欢迎
  • Authing 概述
  • 快速开始
    • 注册 Authing 开发者账号
    • 第一个应用
    • 基础概念
    • 实现单点登录
    • 控制台概览
    • 部署模型和价格
    • 最佳开发实践
    • 我该如何选择 Authing 的技术
  • 进阶指南
    • 理解认证和授权
      • 用户名 - 密码认证
      • 邮箱 - 密码认证
      • 手机 - 验证码认证
      • JWT Token 释义及使用
    • 验证 Token
    • 配置用户权限
    • 迁移老数据进 Authing
    • 错误代码
  • 认证
    • 接入 OAuth 2.0
      • 创建 OAuth 应用
      • 使用 OAuth 授权
    • 接入 OpenID Connect
      • 创建 OIDC 应用
      • 使用 OIDC 授权
      • 理解 OIDC 流程
      • OIDC 常见问题
    • 接入 SAML
      • 创建 SAML Identity Provider 应用
      • 创建 SAML Service Provider 应用
      • 理解 SAML 流程
      • 同时使用 Authing 作为 SP 和 IdP
      • 使用 SAML Identity Provider
        • 在阿里云访问管理中使用
        • 在腾讯云访问管理中使用
        • 在 Auth0 中使用
      • 使用 SAML Service Provider
        • 与 Auth0 SAML IdP 对接
        • 与 SSOCircle SAML IdP 对接
    • 接入 LDAP
      • 配置 LDAP 服务
      • 使用 Authing 的 LDAP 用户目录
    • 接入 Active Directory
  • 社会化登录
    • 接入 Web 端社会化登录
      • GitHub 登录
      • 微信 PC 扫码登录
      • 微信 APP 内网页登录
      • 企业微信(第三方应用)网页授权登录
      • 企业微信(第三方应用)扫码登录
      • 企业微信(企业内部)扫码登录
      • 新浪微博登录
      • 钉钉登录
      • QQ 登录
      • 配置登录授权 Scope
    • 接入移动端社会化登录
      • 微信登录
      • 支付宝登录
    • 接入小程序登录
      • 小程序登录
        • 用户登录凭证(code)最佳实践
      • APP 拉起小程序登录
    • 打通微信账号体系
  • 扫码登录
    • 小程序扫码登录
      • 接入私有化小程序
    • APP 扫码登录
      • 快速接入
      • Web 端 SDK
      • 完整接口列表
      • 自定义配置项
      • 扫码登录原理
  • 移动应用登录
    • 移动应用 SSO
      • 自动检测登录
      • 唤起 App 登录
    • 移动应用身份提供商
  • 授权
    • Authorization 基础概念
      • 什么是基于角色的管理(RBAC)
      • 什么是基于属性的管理(ABAC)
      • 什么是零信任网络
    • Authorization at Authing
    • 接入 RBAC
    • 接入 ABAC
    • 接入组织机构管理
  • 扩展能力
    • 自定义认证流程(Pipeline)
      • 创建你的第一个 Pipeline 函数
      • Pipeline 函数开发指南
      • 应用场景
      • user 对象
      • context 对象
      • 使用环境变量
      • 可用的 Node Modules
      • 如何调试
      • Node SDK
      • GraphQL API
      • 常见问题
      • 私有化部署
    • 使用 Webhook
    • 自定义用户字段
  • 开发资源
    • 开发资源
    • API(GraphQL)
    • Guard for Web
      • 自定义 Guard 的 UI 样式
    • Guard for Mobile
      • Guard for React Native
    • Guard VS 自定义 UI
    • SDK for 单点登录
    • SDK for JavaScript
      • 查询用户权限
      • 绑定社会化登录
      • 自定义用户字段
      • 管理 MFA 口令
      • 自定义请求链接
    • SDK for Node.js
      • 权限控制
      • 查询用户权限
      • 组织机构管理
      • 老版权限控制(deprecated)
      • Pipeline 函数
      • 自定义用户字段
      • 绑定社会化登录
      • 管理 MFA 口令
      • 自定义请求连接
    • SDK for React Native
    • SDK for 微信小程序
    • SDK for Java
    • SDK for Objective-C
    • SDK for Python
    • SDK for Go
    • SDK for PHP
    • 函数计算(FaaS)
  • 通信
    • 邮件
    • SMS
  • MFA
    • 配置 MFA 安全口令
      • 使用 Microsoft Authenticator 添加 MFA 令牌
    • 接入 MFA
  • 安全
    • 配置 Web 安全域
    • 配置用户池密码强度
    • 配置密码加密函数
  • 其他
    • 常见问题
    • 集成案例
      • Authing 与 AWS 集成案例
      • 函数计算与 AaaS 集成案例
      • Odoo 集成案例
      • 社会化登录集成案例
    • 社交互联数据
    • 为 Authing 贡献 SDK
      • 了解 Authing 的模块
Powered by GitBook
On this page
  • 安装
  • 快速接入
  • 支持的回调函数列表
  • 自定义 UI

Was this helpful?

  1. 开发资源

SDK for React Native

Previous自定义请求连接NextSDK for 微信小程序

Last updated 5 years ago

Was this helpful?

🏠

Authing 支持 React Native 移动端开发移动端,使得开发者可以快速接入支付宝、微信等 APP 登录,以及免代码开发支持邮箱密码、用户名密码、手机验证码登录。

authing-rn-sdk 示例

以下是提供的完整功能列表:

  • 邮箱密码登录注册

  • 手机验证码登录

  • 用户名密码登录

  • 忘记密码以及重置密码

  • 移动端 APP 社会化登录

目前支持的社会化登录有:

你可以通过下面这些文档了解如何使用 authing-rn-sdk 接入移动端社会化登录:

安装

注:authing-rn-sdk 的 npm 包名称为 @authing/rn

yarn add react-native-gesture-handler react-native-webview
yarn add @authing/rn

如果是 IOS,需要执行:

cd ios && pod install

注:从 react-native 0.60 版本开始,不再需要手动执行 react-native link 指令。

如果一切顺利,你会看到:

由于平台限制,如果需要接入社会化登录,还需要进行一些额外配置,详情见下文。

现在一切就绪,可以开始使用 authing-rn-sdk 快速接入 Authing 强大的身份解决方案啦!

快速接入

接入 Guard 非常简单,最简情况下,你只需要指定应用池 ID 和成功登录事件的回调函数即可!(完整的事件列表见下文)

如果你对 Authing 用户池的概念不是很了解,可以先阅读基础概念文档。用户池 ID 可从 Authing 控制台中获取。

import { Guard } from "@authing/rn"
const onLogin = (userInfo) => {
    // deal with userInfo
}
<Guard
  userPoolId={userPoolId}
  onLogin={onLogin}
 />

下面是一个简单的完整示例:

import React from 'react';
import {
  SafeAreaView,
  StatusBar,
} from 'react-native';
import { Guard } from "@authing/rn"

const App = () => {
  const userPoolId = "5dd77e6efa26f000d18101ca"
  const options = {
    title: "Authing Guard SDK",
    forceLogin: true // 将注册和登录合并,当用户不存在的时候为其自动注册
  }
  const onLogin = (loginMethod, userInfo) => {
    alert(JSON.stringify(userInfo))
  }
  return (
    <>
      <StatusBar barStyle="dark-content" />
      <SafeAreaView style={{ flex: 1 }}>
        <Guard
          userPoolId={userPoolId}
          options={options}
          onLogin={onLogin}
        />
      </SafeAreaView>
    </>
  );
};

export default App;

通过以下指令运行: IOS:

npx react-native run-ios

Android:

npx react-native run-android

用户成功登录之后 authing-rn-sdk 会将用户信息 userInfo 回调给传入的 onLogin 函数,用户信息中包含了 Authing 用户 ID、头像、昵称等,还包括登录凭证 token。userInfo 示例如下:

{
    "_id": "5dc10bcb6f94c178c6ffffb9",
    "email": null,
    "emailVerified": false,
    "unionid": "oiPbDuG4S7msrKHPKDc8MECSe8jM",
    "openid": "oiPbDuG4S7msrKHPKDc8MECSe8jM",
    "oauth": "{\"openid\":\"oiPbDuG4S7msrKHPKDc8MECSe8jM\",\"nickname\":\"廖长江\",\"sex\":1,\"language\":\"zh_CN\",\"city\":\"海淀\",\"province\":\"北京\",\"country\":\"中国\",\"headimgurl\":\"http://thirdwx.qlogo.cn/mmopen/vi_32/GkxYERPDdTMk7bOk3BgBmEEYul8oMcOoLgNHLoibZn5ibe4EulWBp1xo6uN4az59eoSBYBW0QmXB9TrsJEM0EoPw/132\",\"privilege\":[]}",
    "registerMethod": "oauth:wxmp",
    "username": "廖长江",
    "nickname": "廖长江",
    "company": "",
    "photo": "https://usercontents.authing.cn/avatar-5dc10bcb6f94c178c6ffffb9-1572932555337",
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InVuaW9uaWQiOiJvaVBiRHVHNFM3bXNyS0hQS0RjOE1FQ1NlOGpNIiwiaWQiOiI1ZGMxMGJjYjZmOTRjMTc4YzZmZmZmYjkiLCJjbGllbnRJZCI6IjVkYTdlZGFiNTAzOTZjMWFkOTYyMzc4YSJ9LCJpYXQiOjE1NzI5NTY0MjUsImV4cCI6MTU3NDI1MjQyNX0.OTgl72WZS8So3R5DbWCJ7I_Bd0LaZa4S0TAVMg9qaYQ",
    "tokenExpiredAt": "11/20/2019, 8:20:25 PM",
    "loginsCount": 43,
    "lastLogin": "11/5/2019, 8:20:25 PM",
    "lastIP": "127.0.0.1",
    "signedUp": "11/5/2019, 1:42:35 PM",
    "blocked": false,
    "isDeleted": false
}

如何携带 token

将 Authorization 请求头设置为 "Bearer " + token,例如:

注意 Bearer 和 token 之间的空格

Authorization: "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7InVuaW9uaWQiOiJvaVBiRHVHNFM3bXNyS0hQS0RjOE1FQ1NlOGpNIiwiaWQiOiI1ZGMxMGJjYjZmOTRjMTc4YzZmZmZmYjkiLCJjbGllbnRJZCI6IjVkYTdlZGFiNTAzOTZjMWFkOTYyMzc4YSJ9LCJpYXQiOjE1NzI5NTY0MjUsImV4cCI6MTU3NDI1MjQyNX0.OTgl72WZS8So3R5DbWCJ7I_Bd0LaZa4S0TAVMg9qaYQ"

如果你使用的是 axios,可以这样写:

axios.get('https://mywebsite.com/endpoint/', {
  headers: {
    Authorization: `Bearer ${userInfo.token}`
  }
})

如果你使用的是 fetch,可以这样写:

fetch('https://mywebsite.com/endpoint/', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${userInfo.token}`
  },
  body: JSON.stringify({
    firstParam: 'yourValue',
    secondParam: 'yourOtherValue',
  }),
});

如何在后端检验 Token

开发者可以把这个方法封装成一个函数,比如说 check_authing_token_status(为了方便我使用了 Python ):

开发者不用在后端存储该 token,只需要调用 Authing 提供的接口。

def check_authing_token_status(token: str) -> bool:
    """
    :param token: Authing 返回用户信息中携带的 token
    :return: 布尔值,表示是否处于登录状态
    """
    # 调用 Authing 提供的方法,具体实现方法省略,请参见上文提到的文档
    pass

然后就可以通过登录状态和自己的业务逻辑对请求进行响应了,比如:

logged_in = check_authing_token_status(token)
if not logged_in:
    # 返回错误提示
# 正常继续下面的逻辑

如何通过用户角色控制用户访问

支持的回调函数列表

回调函数

对应事件

参数

参数说明

onLogin

成功登录

userInfo

用户信息。

onLoginError

登录失败

error

错误信息。

onSocialLoad

社会化登录列表加载完成

oauthList

完整的 OAuth 列表,若用户未在后台配置过则为空。注:Native 端只会显示 Native 应用的社会化登录。

onSocialUnload

社会化登录列表加载失败

error

错误信息

onRegister

用户注册成功

userInfo

用户数据。和 onLogin 回调函数的 userInfo 参数一致,但是 token 为空。

onRegisterError

用户注册失败

error

错误信息.

onEmailSent

忘记密码邮件发送成功

data

发送的结果

onEmailSentError

忘记密码邮件发送失败

error

错误信息

onResetPassword

重置密码成功

data

重置密码结果

onResetPasswordError

重置密码失败

error

错误信息

自定义 UI

Guard 支持高度自定义,可以通过 options 参数传入,如:

<Guard
  userPoolId={userPoolId}
  options={{
    title: '你的应用名称',
    logo: '你的应用图标',
    forceLogin: true, // 将注册和登录合并,如果用户不存在会自动创建并登录。
    placeholder: {
        username: 'xxxxx', // 自定义用户名输入框的 placeholder
    }
  }}
  onLogin={onLogin}
/>

加入自定义 CSS

authing-rn-sdk 还支持通过 options.css 传入自定义 CSS 样式,这使得开发者可以高度自定义表单样式。如果指定了 options.css,会在 DOM 的 head 中插入一个 <style type="text/css"></style> 节点。 示例:

const css = `
body {
    background: #6699 !important;
} 
`
<Guard
  userPoolId={userPoolId}
  options={{
    css,
  }}
  onLogin={onLogin}
/>

效果如图所示:

。

如果你想直接调用接口,可以使用 。

Authing 提供了几种方法帮助检验 token 的合法性和对应用户的登录状态,。

有时候是否登录这一个条件是不足以判断请求方是否有访问资源的权限的,为此 Authing 还提供了用户角色相关的 API。详情请查看。

authing-rn-sdk 示例

其他完整的参数请参考:。

点击此查看演示视频
authing.js
文档点这里
用户角色文档
Guard 官方文档
Homepage