Yii2:为啥 auth 键在 User 类中?

Posted

技术标签:

【中文标题】Yii2:为啥 auth 键在 User 类中?【英文标题】:Yii2: Why is the auth key in class User?Yii2:为什么 auth 键在 User 类中? 【发布时间】:2014-11-27 19:44:19 【问题描述】:

正如标题所阐明的,为什么在 Yii2 中引入了 auth 密钥?它的主要用途是什么?它在身份验证中有何用处?

【问题讨论】:

【参考方案1】:

主要用途是通过cookie对用户进行身份验证。当您选择在登录时被记住时,这就是您被记住的方式。系统必须以某种方式识别并登录您。它可以将您的用户名和密码保存在 cookie 中(这将是不安全的),也可以通过其他方式记住您。这是手段之一。登录到 Yii 应用程序后,查看它创建的 _identity cookie,您会看到 auth_key 是 cookie 的一部分。

cookie 实际上会记住 $id、$authKey 和 $duration,id\auth_key 组合比用户名/密码组合更安全。

【讨论】:

为什么不使用默认的 phpSESSID 和 session 来记忆?我的意思是您可以将会话超时设置为一周或一个月。 研究更改会话超时,你会看到它的问题。 我们可以在无会话应用程序中使用身份验证密钥进行客户端身份验证 你可能可以。但这意味着您将需要该信息来验证用户。我构建了 REST api(无会话),并使用 JWT 创建了服务器可以信任的令牌。服务器创建 JWT,将其传递给客户端,客户端在所有请求中使用它,因此服务器信任其中的信息,因为它对其进行了编码。【参考方案2】:

如前所述,如果您的应用程序使用基于 cookie 的登录功能,您只需要实现 getAuthKey()validateAuthKey()。在这种情况下,您可以使用以下代码为每个用户生成一个auth 密钥并将其存储在用户表中:

更多细节可以在官方文档中找到: https://www.yiiframework.com/doc/guide/2.0/en/security-authentication

【讨论】:

以上是关于Yii2:为啥 auth 键在 User 类中?的主要内容,如果未能解决你的问题,请参考以下文章

yii2中关联查询

CakePHP 3外键在视图中

yii2 ActiveRecord多表关联以及多表关联搜索的实现

yii2 ActiveRecord多表关联以及多表关联搜索的实现

Django:为啥要为 UserProfile 创建 OneToOne 而不是子类化 auth.User?

为啥“req.user”在使用sails-auth 验证后总是在/user/me 控制器中为空?