From b72106e9531c0c68d1ac7216e7585417c81e0f2e Mon Sep 17 00:00:00 2001 From: wangyaqi Date: Fri, 28 Feb 2020 11:10:15 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20unicloud=20=E7=99=BB=E5=BD=95=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/uniCloud/authentication.md | 76 ++++++++---------------------- docs/uniCloud/cf-authentication.md | 1 + 2 files changed, 21 insertions(+), 56 deletions(-) diff --git a/docs/uniCloud/authentication.md b/docs/uniCloud/authentication.md index 3d9ef3ef..f66715fd 100644 --- a/docs/uniCloud/authentication.md +++ b/docs/uniCloud/authentication.md @@ -1,6 +1,10 @@ **本章内容仅针对腾讯云开发,阿里侧暂不支持** -**腾讯云侧必须以任意登录方式登录之后才可以访问云端资源。开发者在控制台开启匿名登录之后,可以在客户端以匿名登录方式来获取访问云端资源的权限** +## 名词解释 + +- Ticket(票据):由云函数调用`createTicket`返回的票据,用于客户端使用票据进行登录操作 +- 匿名登录:用户未进行登录操作的状态 +- 短期访问令牌:用户身份的凭证(access token),调用`signInWithTicket`或者`linkAndRetrieveDataWithTicket`之后会自动进行存储 ## uniCloud.auth() @@ -12,7 +16,7 @@ const auth = uniCloud.auth() ``` -## auth.signInAnonymously() + + ## auth.signInWithTicket() -进行自定义登录,详细描述参考[自定义登录](#自定义登录) +使用,详细描述参考[自定义登录](#自定义登录) **示例代码** @@ -78,21 +83,22 @@ auth.signInWithTicket('YourTicket').then(() => { }) ``` -## 自定义登录 + +## 登录流程 -`uniCloud`允许开发者使用特定的登录凭据`Ticket`对用户进行身份认证。开发者可以使用`服务端 SDK`来创建`Ticket`,并且将`token`传入到应用内,然后调用`signInWithTicket()`获得登录态。 +`uniCloud`允许开发者使用特定的登录凭据`Ticket`对用户进行身份认证。开发者可以使用`服务端 SDK`来创建`Ticket`,并且将`Ticket`传入到应用内,然后调用`signInWithTicket()`获得登录态。 -### 获取私钥文件 +### 第一步:获取私钥文件 登录uniCloud控制台[uniCloud控制台](http://unicloud.dcloud.net.cn/),在`用户管理页面`中,点击“登录设置”,然后**生成并下载私钥**: ![uniCloud下载私钥](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/auth-custom.png) -### 使用云函数创建登录凭据 +### 第二步:使用云函数创建登录凭据 -获取私钥文件之后,重命名为`credentials.json`放在云函数同级目录即可 +获取私钥文件(`credentials.json`)之后,放在需要生成`Ticket`的云函数内`index.js`同级即可 -`服务端 SDK`内置了生成`Ticket`的接口,开发者需要提供一个自定义的`customUserId`作为用户的唯一身份标识。`Ticket`有效期为**5分钟**,过期则失效。 +`服务端 SDK`内置了生成`Ticket`的接口,开发者需要提供一个自定义的`customUserId`作为用户的**唯一身份标识**。`Ticket`有效期为**5分钟**,过期则失效。 每个用户的`customUserId`不能相同,每次用户重新登录时,原有的登录态将会失效。 @@ -105,34 +111,7 @@ const ticket = uniCloud.auth().createTicket(customUserId, { // 然后把 ticket 发送给客户端 ``` - - -### 客户端上使用Ticket登录 +### 第三步:客户端上使用Ticket登录 创建`Ticket`之后,开发者应将`Ticket`发送至客户端,然后使用`客户端SDK`提供的 `signInWithTicket()` 登录`uniCloud`: @@ -142,32 +121,17 @@ auth.signInWithTicket(ticket).then(() => { }) ``` - ## 匿名登录 -uniCloud允许开发者使用匿名登录的方式进行静默授权,可以避免强制登录。在匿名状态下可正常的调用uniCloud的资源,开发者同时可以配合安全规则针对匿名用户制定对应的访问限制。 - -### 开启匿名登录授权 -登录uniCloud控制台[uniCloud控制台](http://unicloud.dcloud.net.cn/),在`用户管理页面`中,点击“登录设置”,点击“登录设置”,然后在“匿名登录”一栏打开/关闭可用状态。 -![uniCloud匿名登录](https://img.cdn.aliyun.dcloud.net.cn/uni-app/uniCloud/auth-anonymously.png) - -### 客户端进行匿名登录 -```js -await auth.signInAnonymously().catch(err=>{ - // 登录失败会抛出错误 -}); -// 匿名登录成功检测登录状态isAnonymous字段为true -const loginState = await auth.getLoginState(); -console.log(loginState.isAnonymous) // true -``` +uniCloud允许开发者使用匿名登录的方式进行静默授权,可以避免强制登录。在匿名状态下可正常的调用uniCloud的资源,开发者同时可以配合安全规则针对匿名用户制定对应的访问限制。 #### 匿名用户重新登录 -匿名用户如果要重新使用开发者提供的身份登录,可以调用`auth.signInWithTicket`来进行。[参考](#客户端上使用Ticket登录) +匿名用户如果要重新使用开发者提供的身份登录,可以调用`auth.signInWithTicket`来进行。[参考](#signinwithticket) #### 匿名用户转化为自定义用户 目前uniCloud支持将匿名用户转化为自定义登录用户,此转正用户将会继承匿名用户在云端创建的资源,流程如下: -1. 首先需要按照自定义登录的流程搭建获取自定义登录凭证`ticket`的服务; +1. 首先需要按照[登录流程](#cloudtoken)搭建获取自定义登录凭证`ticket`的服务; 2. 客户端请求接口获取自定义登录凭证`ticket`。**请注意**,此`ticket`必须未注册过uniCloud,换句话说,匿名用户只能转化为新的uniCloud用户; 3. 客户端调用`auth.linkAndRetrieveDataWithTicket`API,如下: ```js diff --git a/docs/uniCloud/cf-authentication.md b/docs/uniCloud/cf-authentication.md index 5fdc359a..14048d42 100644 --- a/docs/uniCloud/cf-authentication.md +++ b/docs/uniCloud/cf-authentication.md @@ -27,6 +27,7 @@ const { const IP = auth.getClientIP() ``` + ### auth.createTicket(String customUserId, Object createTicketOptions) 开发者可以使用云函数创建登录凭证,提供给客户端进行登录操作。[详见](uniCloud/authentication.md#自定义登录) -- GitLab