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