listfixer/yii2-remember-me

增强型“记住我”功能

安装数: 2,423

依赖项: 0

建议者: 0

安全: 0

星标: 1

关注者: 4

分支: 1

开放问题: 0

类型:yii2-extension

v1.0.1 2017-02-04 12:55 UTC

This package is auto-updated.

Last update: 2024-09-06 13:54:40 UTC


README

本扩展将Yii2的标准的“记住我”身份cookie功能替换为类似于以下描述的功能: http://jaspan.com/improved_persistent_login_cookie_best_practice

当用户在登录时请求“记住我”,将为该用户创建一个新的身份cookie。该cookie包含三项内容,这些内容也存储在数据库表中:(1)cookie ID,即身份cookie数据库表中的记录编号;(2)cookie密钥,即该特定cookie的“密码”;(3)用户密钥,即关联用户的“密码”。当我说“密码”时,它是一个随机字符串,而不是实际的密码。数据库存储其他一些信息,包括用户ID号。

每次用户重新启动浏览器并使用此系统进行身份验证时,都会将这三项内容与数据库进行核对。如果cookie的内容与数据库中的记录匹配,则用户可以访问系统,并生成一个新的用户密钥。新的用户密钥存储在数据库和身份cookie中。

如果特定用户使用三台不同的计算机,则数据库中将有三条不同的记录,每台计算机对应一个cookie。当每个cookie用于验证用户时,该特定cookie的用户密钥将被重新生成,而其他身份cookie的用户密钥保持不变。这允许特定用户在多台计算机上拥有“记住我”功能,同时用户密钥在使用时仍然会改变。

如果有人复制或窃取了身份cookie,无论使用哪个cookie(原始或副本)都会正常工作,因为没有方法可以确定哪个是原始的,哪个是副本的。用户密钥将匹配,并生成新的用户密钥。一旦使用其他cookie,用户密钥就已经改变。cookie ID和cookie密钥将匹配,但用户密钥将不会匹配,从而表明存在多个具有此cookie ID和cookie密钥的身份cookie。然后删除数据库记录,从而禁用所有具有此cookie ID和cookie密钥的cookie。

要创建数据库表,请从您的Yii2应用程序基础目录使用以下命令

php ./yii migrate --migrationPath=@vendor/listfixer/yii2-remember-me/migrations

数据库迁移假定您有一个名为“user”的表,其中有一个名为“id”的整数主键。

要启用此扩展,请编辑您的配置文件以包括以下组件信息

'components' => [ 'user' => [ 'class' => 'listfixer\remember\RememberMe', 'identityClass' => /* 你应该已经在这里有了某些内容 */, 'enableAutoLogin' => true, ] ]

当用户更改密码时,您可以配置系统通过调用此方法禁用该用户的所有现有身份cookie

\listfixer\remember\models\UserIdentityCookie::deleteUserCookies( $this->id );

如果您使用的是Yii2高级模板,那么应将此添加到common/models/User.php中的setPassword()方法中。