nojimage / cakephp-remember-me
CakePHP的RememberMe身份验证适配器插件
Requires
- php: >=8.1
- ext-json: *
- cakephp/authentication: ^3.0
- cakephp/core: ^5.0
- cakephp/orm: ^5.0
Requires (Dev)
- cakephp/cakephp: ^5.0
- cakephp/cakephp-codesniffer: ^5.1
- cakephp/migrations: ^4.0
- phpunit/phpunit: ^10.1
README
此插件提供了一个通过cookie实现永久登录的认证处理器。此插件使用发行令牌的方法,而不是将加密的用户名/密码设置为cookie。
此库受Barry Jaspan的文章《改进的持久登录cookie最佳实践》和Gabriel Birke的库《https://github.com/gbirke/rememberme》的启发。
安装
您可以使用composer将此插件安装到您的CakePHP应用程序中。
安装composer包的推荐方法是
php composer.phar require nojimage/cakephp-remember-me:^5.0
在您的项目src/Application.php
中添加以下语句来加载插件:
$this->addPlugin('RememberMe');
或者运行控制台命令
bin/cake plugin load RememberMe
运行迁移
bin/cake migrations migrate -p RememberMe
与认证插件一起使用
如果您正在使用cakephp/authentication,请使用RememberMeTokenIdentifier
和CookeAuthenticator
。
示例:将RememberMe的Identifier和Authenticator加载到Application中的getAuthenticationService
钩子中
// in your src/Application.php class Application extends ... { public function getAuthenticationService(...): void { $service = new AuthenticationService(); $fields = [ 'username' => 'email', 'password' => 'password' ]; // ... setup other identifier and authenticator // setup RememberMe $service->loadIdentifier('RememberMe.RememberMeToken', compact('fields')); $service->loadAuthenticator('RememberMe.Cookie', [ 'fields' => $fields, 'loginUrl' => '/users/login', ]); } }
有关getAuthenticationService
的更多信息,请参阅:快速入门 - CakePHP Authentication 3.x
RememberMe.RememberMeTokenIdentifier选项
字段
用于查找的字段。
默认值: ['username' => 'username']
$service->loadIdentifier('RememberMe.RememberMeToken', [
'fields' => [
'username' => 'email',
],
]);
解析器
身份解析器。如果更改解析器,必须扩展Authentication\Identifier\Resolver\OrmResolver
。
默认值: 'Authentication.Orm'
$service->loadIdentifier('RememberMe.RememberMeToken', [
'resolver' => [
'className' => 'Authentication.Orm',
'userModel' => 'Administrators',
],
]);
tokenStorageModel
用于查找登录cookie令牌的模型。
默认值: 'RememberMe.RememberMeTokens'
$service->loadIdentifier('RememberMe.RememberMeToken', [
'tokenStorageModel' => 'YourTokensModel',
]);
userTokenFieldName
将令牌数据添加到身份时的属性名称。
默认值: 'remember_me_token'
$service->loadIdentifier('RememberMe.RememberMeToken', [
'userTokenFieldName' => 'cookie_token',
]);
RememberMe.CookeAuthenticator选项
loginUrl
登录URL,字符串或URL数组。默认为null,所有页面都将进行检查。
默认值: null
$service->loadAuthenticator('RememberMe.Cookie', [
'loginUrl' => '/users/login',
]);
urlChecker
URL检查器类或对象。
默认值: 'DefaultUrlChecker'
$service->loadAuthenticator('RememberMe.Cookie', [
'loginUrl' => '/users/login',
]);
rememberMeField
当通过表单认证输入此键时,它将发行一个登录cookie。
默认值: 'remember_me'
$service->loadAuthenticator('RememberMe.Cookie', [
'rememberMeField' => 'remember_me',
]);
字段
将username
映射到指定的POST数据字段的数组。
默认值: ['username' => 'username']
$service->loadAuthenticator('RememberMe.Cookie', [
'fields' => [
'username' => 'email',
],
]);
cookie
登录cookie的写入选项。
- name: Cookie名称(默认:
'rememberMe'
) - expire: Cookie过期时间(默认:
'+30 days'
) - path: 路径(默认:
'/'
) - domain: 域名,(默认:
''
) - secure: 安全标志(默认:
true
) - httpOnly: Http only标志(默认:
true
)
$service->loadAuthenticator('RememberMe.Cookie', [
'cookie' => [
'name' => 'rememberMe',
'expires' => '+30 days',
'secure' => true,
'httpOnly' => true,
],
]);
tokenStorageModel
用于存储登录cookie令牌的模型。
默认值: 'RememberMe.RememberMeTokens'
$service->loadAuthenticator('RememberMe.Cookie', [
'tokenStorageModel' => 'YourTokensModel',
]);
always
当此选项设置为true时,在认证标识后始终发行登录cookie。
默认值: false
$service->loadAuthenticator('RememberMe.Cookie', [
'always' => true,
]);
dropExpiredToken
当此选项设置为true时,在认证标识后删除过期的令牌。
默认值: true
$service->loadAuthenticator('RememberMe.Cookie', [
'dropExpiredToken' => false,
]);