ptejada/uflex

此包已被放弃且不再维护。未建议替代包。

一站式PHP用户认证类

1.0.7 2016-05-20 01:31 UTC

This package is auto-updated.

Last update: 2019-12-27 13:34:21 UTC


README

未来的开发已取消。我建议使用内置用户认证和授权的框架,例如Laravel

uFlex 1.0.x

一个简单的PHP用户认证库。该库是在 PHP 5.3.x 环境下开发和维护的。单元测试也在Travis-CI上针对 PHP 5.4.xPHP 5.5.x 运行。

单个类文件 class.uFlex.php 可在 Legacy Branch 上找到

Build Status Stories in Ready

更多信息

从0.9x版本升级...

在更新之前,您需要运行SQL升级脚本。在运行升级脚本之前,请确保备份您的数据库。请参阅DB目录 https://github.com/ptejada/uFlex/tree/master/db

如果不使用Composer,则将 autoload.php 脚本包含在您的应用程序中,它将按需自动包含库类。

如果使用composer,则只需在您的应用程序中包含 vendor/autoload.php 即可,如果尚未包含的话。

总体而言,版本1.0采用了更面向对象的编程方法,并更紧密地遵循了约定。有关更多信息,请查看API更改

入门

将其包含到项目中

如果您使用 Composer,只需将 ptejada/uflex 添加为依赖项。注意 uflex 的首字母大小写,全部小写。例如

{
    "require": {
        "ptejada/uflex": "1.*"
    }
}

当使用 Composer 时,使用 vendor/autoload.php 脚本将库包含到您的项目中。

如果不使用Composer,则在您的项目中克隆此存储库。使用 autoload.php 脚本将库包含到您的项目中。

配置用户对象

当实例化User类时,并没有发生太多事情,会话没有被初始化,也没有建立数据库连接。这是为了允许配置该类。一旦配置完成,必须调用start()方法才能开始用户认证过程。例如

<?php
    include('/path/to/uflex/directory/autoload.php');

    //Instantiate the User object
    $user = new ptejada\uFlex\User();

    // Add database credentials
    $user->config->database->host = 'localhost';
    $user->config->database->user = 'test';
    $user->config->database->password = 'test';
    $user->config->database->name = 'uflex_test'; //Database name

    // OR if in your project you already have a PDO connection
    // $user->config->database->pdo = $existingPDO;

    /*
     * You can update any customizable property of the class before starting the object
     * construction process
     */

    //Start object construction
    $user->start();
?>

建议为每个项目创建一个如上所示的配置文件。这样,您可以使用配置文件为项目中任何PHP脚本提供一个预配置的User实例。

或者,您可以创建自己的类,该类为您配置并启动User对象。示例

<?php
    
    class MyUser extends ptejada\uFlex\User {
        public function __construct()
        {
            parent::__construct();
            
            //Add database credentials
            $this->config->database->host = 'localhost';
            $this->config->database->user = 'test';
            $this->config->database->password = 'test';
            $this->config->database->name = 'uflex_test'; //Database name

            // Start object construction
            $this->start();
        }
    }
?>

以下是PHP类文件的一部分摘录,列出了在调用User实例上的start()之前可以更改的自定义config属性。注意:config属性是一个Collection实例

	'cookieTime'      => '30',
    'cookieName'      => 'auto',
    'cookiePath'      => '/',
    'cookieHost'      => false,
    'userTableName'   => 'users',
    'userSession'     => 'userData',
    'userDefaultData' => array(
        'Username' => 'Guess',
        'ID'  => 0,
        'Password' => 0,
    ),
    'database' => array(
        'host'     => 'localhost',
        'name'     => '',
        'user'     => '',
        'password' => '',
        'dsn'      => '',
        'pdo'      => '',
    )

理解集合

Collection是数组的对象表示。在整个项目中,Collection有多个用途,并且易于使用。Collection为我们处理未定义索引的错误,并使我们的代码更加简洁。

考虑以下使用普通数组的示例

<?php
    $data = array(
        'name' => 'pablo',
    );

    if (isset($data['quote']) && $data['quote'])
    {
        echo $data['name'] . "'s quote is: " . $data['quote'];
    }
    else
    {
        echo $data['name'] . " has no quote";
    }
?>

以下是使用Collection的相同代码

<?php
    $data = ptejada\uFlex\Collection(array(
        'name' => 'pablo',
    ));

    if ($data->quote)
    {
        echo  "{$data->name}'s quote is:  $data->quote";
    }
    else
    {
        echo "{$data->name} has no quote";
    }
?>

有关Collection类的更多信息,请参阅API文档

使用会话

User对象通过其session属性提供通过其session属性轻松管理PHP会话,该属性是Session类的实例。默认情况下,User类管理PHP超级全局变量$_SESSION中的userData命名空间,但您可以在启动User对象之前通过设置config->userSession来配置它。这非常强大,因为它允许User类使用PHP会话而不干扰其他软件的会话使用。

Session类只是一个扩展的Collection,所以它像任何其他集合一样工作。唯一的区别是它有一些额外的方法,以及它是一个链接集合,这意味着对对象所做的任何更改都将反映在$_SESSION上,从而自动保存到PHP会话中。

考虑以下代码及其输出,以更好地了解所有组件是如何协同工作的

<?php

    $user = new ptejada\uFlex\User();

    // Change the session namespace
    $user->config->userSession = 'myUser';

    $user->start();

    // Shows session right after the User object has been started
    print_r($_SESSION);

    // Stores something in the session
    $user->session->myThing = 'my thing goes here';

    // Shows the session with the content of the myThing property
    print_r($_SESSION);

    // Stores something in the PHP session outside of the namespace scope managed by the User class
    $_SESSION['other'] = 'other information stored here';

    print_r($_SESSION);

    // Only destroys the session namespace managed by the User Class
    $user->session->destroy();

    print_r($_SESSION);

?>

以下是上一段代码的输出

Array
(
    [myUser] => Array
        (
            [data] => Array
                (
                    [Username] => Guess
                    [ID] => 0
                    [Password] => 0
                )

        )
)

Array
(
    [myUser] => Array
        (
            [data] => Array
                (
                    [Username] => Guess
                    [ID] => 0
                    [Password] => 0
                )

            [myThing] => my thing goes here
        )
)

Array
(
    [myUser] => Array
        (
            [data] => Array
                (
                    [Username] => Guess
                    [ID] => 0
                    [Password] => 0
                )

            [myThing] => my thing goes here
        )

    [other] => other information stored here
)

Array
(
    [other] => other information stored here
)

Session类还可以用于应用程序的其他方面。例如,要管理整个PHP会话,您可以实例化Session类而不带任何参数:new ptejada\uFlex\Session()

有关Session类的更多信息,请参阅API文档

扩展User类

在PHP中,您可以使用面向对象编程语言的方式扩展类。因此,您可以通过添加您的方法或修改来扩展User类的功能,而无需修改类文件本身。您只需创建一个新的PHP类,该类扩展了User

<php
	class User extends ptejada\uFlex\User{
		/*
		 * Add your default properties values
		 * such as database connection credentials
		 * user default information
		 * Or cookie preferences
		 */

		/*
		 * Create your own methods
		 */
		function updateAvatar(){}

		function linkOpeniD(){}
	}
?>