diff --git a/docs/guide-zh-CN/security-authentication.md b/docs/guide-zh-CN/security-authentication.md old mode 100644 new mode 100755 index b88bbc09ad..c5ba69e608 --- a/docs/guide-zh-CN/security-authentication.md +++ b/docs/guide-zh-CN/security-authentication.md @@ -1,24 +1,24 @@ 认证 ============== -认证是对用户权限进行鉴定的过程。它通常使用一个标识符 -(如用户名或电子邮件地址)和一个令牌(比如密码或者 access token)来 +认证是鉴定用户身份的过程。它通常使用一个标识符 +(如用户名或电子邮件地址)和一个加密令牌(比如密码或者存取令牌)来 鉴别用户身份。认证是登录功能的基础。 -Yii提供了一个认证框架,它连接了各个组件支持登录。使用这个框架, +Yii提供了一个认证框架,它连接了不同的组件以支持登录。欲使用这个框架, 你主要需要做以下工作: -* 设置用户组件 [[yii\web\User|user]]; -* 创建一个类实现认证接口 [[yii\web\IdentityInterface]]。 +* 设置用户组件 [[yii\web\User|user]] ; +* 创建一个类实现 [[yii\web\IdentityInterface]] 接口。 ## 配置 [[yii\web\User]] 用户组件 [[yii\web\User|user]] 用来管理用户的认证状态。这需要你 指定一个含有实际认证逻辑的认证类 [[yii\web\User::identityClass|identity class]]。 -在以下应用配置中,通过选项将用户组件 [[yii\web\User|user]] 的 -认证类 [[yii\web\User::identityClass|identity class]] 指定为已实现认证接口的 -`app\models\User` 模型类: +在以下web应用的配置项中,将用户用户组件 [[yii\web\User|user]] 的 +认证类 [[yii\web\User::identityClass|identity class]] 配置成 +模型类 `app\models\User`, 它的实现将在下一节中讲述。 ```php return [ @@ -31,29 +31,29 @@ return [ ``` -## 实现接口 [[yii\web\IdentityInterface]] +## 认证接口 [[yii\web\IdentityInterface]] 的实现 认证类 [[yii\web\User::identityClass|identity class]] 必须实现包含以下方法的 认证接口 [[yii\web\IdentityInterface]]: -* [[yii\web\IdentityInterface::findIdentity()|findIdentity()]]:根据指定的用户ID返回 - 认证模型的实例,当你利用session保持登录状态的时候会用到这个方法。 -* [[yii\web\IdentityInterface::findIdentityByAccessToken()|findIdentityByAccessToken()]]:根据指定的access token返回 - 认证模型的实例,该方法被用在 - 使用单一的令牌认证用户的时候(比如无状态的RESTful应用)。 +* [[yii\web\IdentityInterface::findIdentity()|findIdentity()]]:根据指定的用户ID查找 + 认证模型类的实例,当你需要使用session来维持登录状态的时候会用到这个方法。 +* [[yii\web\IdentityInterface::findIdentityByAccessToken()|findIdentityByAccessToken()]]:根据指定的存取令牌查找 + 认证模型类的实例,该方法用于 + 通过单个加密令牌认证用户的时候(比如无状态的RESTful应用)。 * [[yii\web\IdentityInterface::getId()|getId()]]:获取该认证实例表示的用户的ID。 * [[yii\web\IdentityInterface::getAuthKey()|getAuthKey()]]:获取基于 cookie 登录时使用的认证密钥。 - 认证密钥储存在 cookie 里并且会与服务端进行比较以确保 + 认证密钥储存在 cookie 里并且将来会与服务端的版本进行比较以确保 cookie的有效性。 -* [[yii\web\IdentityInterface::validateAuthKey()|validateAuthKey()]]:验证基于 cookie 登录的 - 认证密钥。 +* [[yii\web\IdentityInterface::validateAuthKey()|validateAuthKey()]] :是基于 cookie 登录密钥的 +验证的逻辑的实现。 -用不到的方法可以空着,例如,你的只是一个 +用不到的方法可以空着,例如,你的项目只是一个 无状态的 RESTful 应用,只需实现 [[yii\web\IdentityInterface::findIdentityByAccessToken()|findIdentityByAccessToken()]] -和 [[yii\web\IdentityInterface::getId()|getId()]] ,其他的方法不用写。 +和 [[yii\web\IdentityInterface::getId()|getId()]] ,其他的方法的函数体留空即可。 -下面的例子是一个通过关联了 `user` 数据表的 -AR 模型 [Active Record](db-active-record.md) 实现的认证类 [[yii\web\User::identityClass|identity class]]。 +下面的例子是一个通过结合了 `user` 数据表的 +AR 模型 [Active Record](db-active-record.md) 实现的一个认证类 [[yii\web\User::identityClass|identity class]]。 ```php user->identity` 获取当前用户身份实例。它返回 +你可以使用表达式 `Yii::$app->user->identity` 检测当前用户身份。它返回 一个表示当前登录用户的认证类 [[yii\web\User::identityClass|identity class]] 的实例, 未认证用户(游客)则返回 null。下面的代码展示了如何从 [[yii\web\User]] 获取其他认证相关信息: @@ -169,17 +169,17 @@ $isGuest = Yii::$app->user->isGuest; ```php // 使用指定用户名获取用户身份实例。 -// 请注意,如果需要的话您可能要验证密码 +// 请注意,如果需要的话您可能要检验密码 $identity = User::findOne(['username' => $username]); // 登录用户 Yii::$app->user->login($identity); ``` -[[yii\web\User::login()]] 方法将当前用户的身份登记到 [[yii\web\User]]。如果使用 session 登录 +[[yii\web\User::login()]] 方法将当前用户的身份登记到 [[yii\web\User]]。如果 session 设置为 [[yii\web\User::enableSession|enabled]],则使用 session 记录用户身份,用户的 -认证状态将维持在整个会话中。如果开启自动登录 [[yii\web\User::enableAutoLogin|enabled]] -则基于 cookie 登录 (如:记住登录状态),它将使用 cookie 保存用户身份,这样 +认证状态将在整个会话中得以维持。如果开启自动登录 [[yii\web\User::enableAutoLogin|enabled]] +则基于 cookie 登录(如:记住登录状态),它将使用 cookie 保存用户身份,这样 只要 cookie 有效就可以恢复登录状态。 为了使用 cookie 登录,你需要在应用配置文件中将 [[yii\web\User::enableAutoLogin]] @@ -199,7 +199,7 @@ Yii::$app->user->logout(); ## 认证事件 -[[yii\web\User]] 类在登录和注销流程预置了一些事件。 +[[yii\web\User]] 类在登录和注销流程引发一些事件。 * [[yii\web\User::EVENT_BEFORE_LOGIN|EVENT_BEFORE_LOGIN]]:在登录 [[yii\web\User::login()]] 时引发。 如果事件句柄将事件对象的 [[yii\web\UserEvent::isValid|isValid]] 属性设为 false,