简化版 / doi
简单的双确认处理程序,具有通过接口处理数据库的功能
Requires
- php: >=5.4
README
_ _ _ _ ___(_)_ __ ___ _ __ | | ___ _ __ __| | ___ (_) / __| | '_ ` _ \| '_ \| |/ _ \| '_ \ / _` |/ _ \| | \__ \ | | | | | | |_) | | (_) | | | | | (_| | (_) | | |___/_|_| |_| |_| .__/|_|\___/|_| |_| \__,_|\___/|_| |_|
简化版Doi
一个简单的双确认验证,带有可注入的数据库处理程序。
简介
我的一个项目中有一个用于电子邮件验证
的过程,另一个用于密码重置
。在两种情况下,我都在生成令牌,将其保存到数据库中,并发送电子邮件给用户以验证请求。这两种场景都使用独立的设置,因为一个是在一开始实现的,另一个是在几个月后实现的。
简化版Doi
具有灵活的设置。它将决定权交给你如何与数据库交互。它只负责其核心
功能:创建和验证双确认过程。
安装
通过Composer获取软件包
{ "require": { "simplon/doi": "*" } }
你还需要在数据库中创建以下表格。表名和数据库类型由你自己决定。以下示例基于MySQL
CREATE TABLE `simplon_doi` ( `token` varchar(6) NOT NULL DEFAULT '', `connector` char(6) NOT NULL DEFAULT '', `data_json` text NOT NULL, `status` tinyint(1) NOT NULL DEFAULT '0', `created_at` int(10) unsigned NOT NULL, `updated_at` int(10) unsigned NOT NULL, UNIQUE KEY `token_status` (`token`,`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
快速示例
创建Doi
以下步骤创建一个Doi
并将其保存到数据库中
require __DIR__ . '/vendor/autoload.php'; // Doi instance with database handler $doi = new \Simplon\Doi\Doi( new \Sample\Handler\SampleDatabaseHandler() ); // connecor is an identifier for your internal reference $connector = 'NL'; // max. 6 chars // data connected to this doi $data = [ 'email' => 'tom@hamburg.de', 'firstName' => 'Tom', 'lastName' => 'Berger', ]; // create entry in database $doiDataVo = $doi->create($connector, $data); // 56,800,235,584 possible tokens
现在你所有的相关数据都在$doiDataVo
中。现在你需要通知你的用户。你可能需要发送一封包含指向你应用的链接的电子邮件。应用需要处理请求并将TOKEN
传递给验证过程。
// THE FOLLOWING PART MUST FIT YOUR EMAIL SOLUTION // SIMPLON\DOI DOES NOT OFFER ANY SOLUTION TO THIS // build callback url $callbackUrl = 'https://yourapp.com?token=' . $doiDataVo->getToken(); // email and your message $userEmail = $doiDataVo->getContentDataArray()['email]); $text = 'Dear user, please confirm by clicking on the following link: ' . $callbackUrl; $email = new MyEmailSolution(); $email->send($userEmail, $text);
验证Doi
如果用户通过回调链接返回,你可以使用以下代码来验证Doi
require __DIR__ . '/vendor/autoload.php'; // Doi instance with database handler $doi = new \Simplon\Doi\Doi( new \Sample\Handler\SampleDatabaseHandler() ); // get token from GET param $token = $_GET['token']; // Pqb2UgtHG0MgIDgI // validate $doiDataVo = $doi->validate($token); // throws DoiException or returns DoiDataVo // do whatever needs to be done // ... // ... // close + invalidate token $doi->complete($doiDataVo);
验证选项
// validation has to be within a given time frame $doiDataVo = $doi->validate($token, 2); // has to be within 2 hours; default: 24 hours // figure how much time is left until token expires $doiDataVo->getTimeOutLeft(); // returns amount in seconds $doiDataVo->getTimeOutLeft(2); // run against time limit of 2 hours // is token timed out? $doiDataVo->isTimedOut(); // returns true/false $doiDataVo->isTimedOut(2); // run against time limit of 2 hours // is this token still usable? takes time and state of token into account $doiDataVo->isUsable(); // true if state is 0 and not timed out $doiDataVo->isUsable(2); // run against time limit of 2 hours
设置:数据库处理程序
一个示例数据库处理程序的非常粗略的抽象。
class SampleDatabaseHandler implements DoiDatabaseInterface { /** * @var string */ private $databaseName = 'testing'; /** * @var string */ private $tableName = 'simplon_doi'; /** * @return resource */ private $dbh; /** * @param DoiDataVoInterface $doiDataVo * * @return bool */ public function save(DoiDataVoInterface $doiDataVo) { // write data to database } /** * @param $token * * @return bool|(DoiDataVo */ public function fetch($token) { // fetch data from database } /** * @param DoiDataVoInterface $doiDataVo * * @return bool */ public function update(DoiDataVoInterface $doiDataVo) { // update data on existing entry } /** * @return resource */ private function getDbh() { if ($this->dbh === null) { $this->dbh = mysql_connect('localhost', 'rootuser', 'rootuser'); mysql_query('use ' . $this->databaseName, $this->dbh); } return $this->dbh; } }
许可证
Cirrus在MIT许可证的条款下免费分发。
版权(c)2015 Tino Ehrich (tino@bigpun.me)
特此授予任何人免费获得此软件及其相关文档文件(“软件”)的副本的权利,用于不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件的副本,并允许向提供软件的人士授权这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者都不对任何索赔、损害或其他责任(无论基于合同、侵权或其他原因)承担责任,这些索赔、损害或其他责任源于、产生于或与软件或软件的使用或其他交易有关。