openclerk/users

本包最新版本(0.1.1)没有提供许可信息。

0.1.1 2017-09-11 07:45 UTC

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);
}

特性

  1. 自动会话管理
  2. 自动登录
  3. 可选地,使用 users_require_email 配置参数要求所有非密码用户提供电子邮件地址
  4. 忘记密码/重置密码功能
  5. 用户可以可选地拥有多个 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

  1. APIs: 启用 Contacts APIGoogle+ API

  2. Credentials: 创建一个新的 Client ID,类型为 Web 应用程序,设置您的可接受 Redirect URI 为您的应用程序中使用的登录和重定向 URL。将生成的 Client IDClient Secret 用于您的站点配置(上面)。

对于 Facebook OAuth2,登录到您的 Facebook Developers Console,创建一个新的应用,并访问此应用的仪表板页面以获取您的 App IDApp Secret

对于 GitHub OAuth2注册一个新的 GitHub 应用程序,并将生成的 Client IDClient 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() 删除用户时触发。

待办事项

  1. 跟踪 last_login
  2. 删除身份
  3. 测试
  4. 在 Packagist 上发布
  5. 添加用户名、其他用户属性
  6. 关于添加额外用户参数的文档
  7. 关于使用Cookies自动登录的文档
  8. 如何添加、更改、删除电子邮件地址
  9. 更多事件