如何正确地在基于路由的mvc中实现登录/注册系统?

时间:2017-11-28 21:40:04

标签: php authentication url-routing

我开始了一个小项目,我有一个路由器,它将返回视图,具体取决于您填写的URL(如果存在)。

<?php

require_once 'page.php';

class Route
{
     private $_uri = array();
     private $_method = array();

/*
 * Builds a collection of internal URL's to look for
 * @param type $uri
 */
public function add($uri, $method = null)
{
    $this->_uri[] = '/' . trim($uri, '/');

    if($method != null){
        $this->_method[] = $method;
    }
}

public function submit()
{

    $uriGetParam = isset($_GET['uri']) ? '/' . $_GET['uri'] : '/';

    $page = new Page('index.twig');
}

}

现在模板是硬编码的,但我想稍后从数据库中获取页面名称,所以我可以拥有动态页面。这就是为什么我需要知道如何使用此代码创建正确的登录系统。我想要&#39; / login&#39;链接到登录页面,将我重定向到我可以管理数据的仪表板,如wordpress,创建页面等。如果我错过了数据,请在评论中询问我。

1 个答案:

答案 0 :(得分:0)

如果您要创建登录系统,那么您很可能希望拥有一组只能由已登录的int用户访问的URL。

private $_logged_in_uris = [];

接下来,您将要修改add()函数以识别需要进行身份验证的网址。

/*
 * Builds a collection of internal URL's to look for
 * @param type $uri
 */
public function add($uri, $method = null,$authenticated=false)
{
    $this->_uri[] = '/' . trim($uri, '/');
    if($authenticated){
       $this->_logged_in_uris[] = '/' . trim($uri,'/');
    }
    if($method != null){
        $this->_method[] = $method;
    }
}

我可以问你为什么要使用$ _GET [&#39; uri&#39;]?最好直接从PHP向您公开的超级全局中获取URI。在这种情况下,$ _SERVER [&#39; REQUEST_URI&#39;]很方便。

要确定用户是否经过身份验证,您需要在用户使用用户名和密码登录后设置会话变量。然后,您可以将$ uri与$ _logged_in_uris中的uris进行比较,然后检查会话变量。如果设置了会话变量,那么他们就可以访问您网站的那一部分。