openclerk / users
Requires
- league/oauth2-client: ~0.6
- openclerk/config: ^0.1
- openclerk/db: ^0.1
- openclerk/events: ^0.2
- soundasleep/lightopenid: dev-master
- soundasleep/php-helpers: dev-master
This package is auto-updated.
Last update: 2024-09-14 09:57:06 UTC
README
Openclerk 用户管理的库,支持密码、OpenID 和 OAuth2 登录。
安装
将 openclerk/users
包作为项目 composer.json
文件中的依赖项,并运行 composer update
以将其安装到项目中。
{ "require": { "openclerk/users": "dev-master" }, "repositories": [{ "type": "vcs", "url": "https://github.com/openclerk/users" }] }
确保您运行了通过 component-discovery 可以发现的全部迁移;有关更多信息,请参阅 openclerk/db 的文档。
$migrations = new AllMigrations(db()); if ($migrations->hasPending(db())) { $migrations->install(db(), $logger); }
特性
- 自动会话管理
- 自动登录
- 可选地,使用
users_require_email
配置参数要求所有非密码用户提供电子邮件地址 - 忘记密码/重置密码功能
- 用户可以可选地拥有多个 OpenID/OAuth2 身份和与一个账户相关联的一个密码
使用方法
本项目使用 openclerk/db 进行数据库管理和 openclerk/config 进行配置管理。
首先使用特定于站点的值配置组件
Openclerk\Config::merge(array( "users_require_email" => false, "user_password_reset_expiry" => "3 days", "user_password_salt" => "abc123", "autologin_expire_days" => 30, "openid_host" => "localhost", "oauth2_google_client_id" => "abc123.apps.googleusercontent.com", "oauth2_google_client_secret" => "abc123", "oauth2_facebook_app_id" => "1234567", "oauth2_facebook_app_secret" => "abc123", )); session_start();
您现在可以使用各种身份验证方法注册和登录用户。组件假定只有一个用户可以拥有任何电子邮件地址,并且所有用户都需要定义一个电子邮件地址作为其主键。
// get current user $user = Users\User::getInstance(db()); // logout any current user Users\User::logout(db()); // get a user instance $user = Users\User::findUser(db(), $user_id);
密码
// signup $user = Users\UserPassword::trySignup(db(), $email /* may not be null */, $password); if ($user) { echo "<h2>Signed up successfully</h2>"; } // login $user = Users\UserPassword::tryLogin(db(), $email /* may not be null */, $password); if ($user) { echo "<h2>Logged in successfully as $user</h2>"; $user->persist(db()); } // forgot password $secret = Users\UserPassword::forgottenPassword(db(), $email); echo "Secret = $secret\n"; // complete forgot password Users\UserPassword::completePasswordReset(db(), $email, $secret, $new_password); // add password to existing user $user = Users\User::getInstance(db()); $result = Users\UserPassword::addPassword(db(), $user, $password);
OpenID
您需要为所有 OpenID 回调设置重定向值,通常与当前脚本的 URL 相同。
// signup $user = Users\UserOpenID::trySignup(db(), $email /* may be null */, $openid, "http://localhost/register.php"); if ($user) { echo "<h2>Signed up successfully</h2>"; } // login $user = Users\UserOpenID::tryLogin(db(), $openid, "http://localhost/login.php"); if ($user) { echo "<h2>Logged in successfully as $user</h2>"; $user->persist(db()); } // add identity to existing user $user = Users\User::getInstance(db()); $result = Users\UserOpenID::addIdentity(db(), $user, $openid, "http://localhost/add.php");
OAuth2
对于 Google OAuth2,登录到您的 Google Developers Console,创建一个新的项目,并访问 APIs & Auth
-
APIs: 启用 Contacts API 和 Google+ API
-
Credentials: 创建一个新的 Client ID,类型为 Web 应用程序,设置您的可接受 Redirect URI 为您的应用程序中使用的登录和重定向 URL。将生成的 Client ID 和 Client Secret 用于您的站点配置(上面)。
对于 Facebook OAuth2,登录到您的 Facebook Developers Console,创建一个新的应用,并访问此应用的仪表板页面以获取您的 App ID 和 App Secret。
对于 GitHub OAuth2,注册一个新的 GitHub 应用程序,并将生成的 Client ID 和 Client Secret 用于您的站点配置(上面)。
// signup $user = Users\UserOAuth2::trySignup(db(), Users\OAuth2Providers::google("http://localhost/register.php")); if ($user) { echo "<h2>Signed up successfully</h2>"; } // login $user = Users\UserOAuth2::tryLogin(db(), Users\OAuth2Providers::google("http://localhost/login.php")); if ($user) { echo "<h2>Logged in successfully as $user</h2>"; $user->persist(db()); } // add identity to existing user $user = Users\User::getInstance(db()); $result = Users\UserOAuth2::addIdentity(db(), $user, Users\OAuth2Providers::google("http://localhost/add.php"));
默认提供的更多 OAuth2 提供商即将推出。
事件
openid_validate
在用户使用 OpenID 模式返回后,在 OpenID 验证发生时触发。如果任何事件返回 false
,则 OpenID 验证将被取消。
事件参数:$light 对象
oauth2_auth
在用户使用 OAuth2 代码返回后,在 OpenID 身份验证发生时触发。如果任何事件返回 false
,则 OpenID 验证将被取消。
事件参数:$provider 对象
user_deleted
当通过 User::delete()
删除用户时触发。
待办事项
- 跟踪 last_login
- 删除身份
- 测试
- 在 Packagist 上发布
- 添加用户名、其他用户属性
- 关于添加额外用户参数的文档
- 关于使用Cookies自动登录的文档
- 如何添加、更改、删除电子邮件地址
- 更多事件