Yii2:用户身份验证的确切工作原理是什么?

时间:2014-12-08 07:26:32

标签: php yii2

我不理解Authentication中的Yii2。在Yii 1中有一个标识类,我们需要使用authentication()方法并调用CWebUser::login()来实现我们的目标。

Yii 2中的主要身份验证过程是什么? 它是如何运作的?

请您解释一下:

  • 完成身份验证所需的所有步骤。
  • 必需的数据库字段或架构。
  • 如何验证多种用户类型。
  • 我需要考虑的其他一些事情是什么?

1 个答案:

答案 0 :(得分:21)

要回答您的问题,需要了解一件事 - Yii2为开发人员提供一些帮助类/接口,以便轻松实现用户身份验证,但并不总是需要遵循或使用其中任何一个。所以我的以下答案只是解释某些类的默认行为。

查看 Yii2高级模板以及了解框架工作流程的源代码始终是一个很好的起点,在我看来,它非常容易阅读。

- 它是如何正常工作的

Yii2框架在其静态上下文中提供了许多核心组件,您始终可以通过Yii::$app->调用它们。其中一个核心组件是user,它实际上是yii\web\User的一个实例,所有默认魔法都在此类中。

不仅user,您还可能还需要使用其他核心组件。我不确定你想要了解它的工作方式有多深,如果我没有给你一个足够深刻的解释,我强烈建议你阅读源代码。完成composer install后,您将拥有源代码,或者访问他们的github进行代码跟踪 - https://github.com/yiisoft/yii2/tree/master/framework

- 完成身份验证所需的所有步骤。

首先,您应该有User类来实现IdentityInterface并扩展ActiveRecord,请参阅高级模板中的示例:https://github.com/yiisoft/yii2-app-advanced/blob/master/common/models/User.php

在您的配置中,将$identityClass组件user设置为上述自定义User类。这是User的最小设置。

接下来,您必须拥有一个控制器,其方法映射到请求URL,例如" / login"。在此方法中,您应该使用自己的方式提取User实例 - $u。这是您的身份验证所在的位置。

然后你可以致电Yii::$app->user->login($u)登录;注销Yii::$app->user->logout()

登录后,您可以通过Yii::$app->user->identity在任何地方获取当前用户实例。

- 必需的数据库字段或架构。

取决于您的需要,这取决于您。该模板只是让您了解如何设计User ActiveRecord类但不受其限制 - usernamepasswordHash是非常常见的,但您始终可以拥有自己的架构。< / p>

- 如何验证多个用户类型。

我不太明白这个问题。希望别人可以提供帮助。

- 我需要考虑的其他一些事情是什么?

如果您决定使用框架支持的RESTful,请记住在findIdentityByAccessToken()课程中实施User,请参阅http://www.yiiframework.com/doc-2.0/guide-rest-authentication.html

中的详细信息

此刻我可以想到一个,可能会在以后添加其他内容。