0

我正在为一个非常大的项目开发 Cakephp 2.3,我即将在全球范围内推出我的网站。

我的应用程序上有一个登录系统。我正在分享我的代码,因为我想确保我的编码是否正确......以及是否检查任何缺少的功能,或者是否有任何关于在代码中添加或删除某些内容的建议将不胜感激。并且还从安全角度发表评论......
请告诉我一些让我的网站更快的提示......例如如何编写更快的查询或从这个 blabla 中删除不需要的

class UsersController extends AppController
{

    public $components = array('Cookie');

    public function beforeFilter()
    {
        parent::beforeFilter();
        App::uses('Utility', 'Utility');
        $this->Auth->allow('index');
        $this->Security->requireSecure('login'); // for security

        $this->Auth->authenticate = array(
            'Authenticate.Cookie' => array(
               'fields' => array(
                    'username' => 'email',
                    'password' => 'password'
               ),
                'userModel' => 'User',
                'scope' => array(
                   'User.active' => 1
                )
            ),
            'Authenticate.MultiColumn' => array(
                'fields' => array(
                    'username' => 'email',
                    'password' => 'password'
                ),
                'columns' => array(
                    'email',
                    'mobileNo'
                ),
                'userModel' => 'User'
            )
        );
    }



public function index()
{
    $this->layout = 'logindefault';

    if (!$this->Auth->login() || !$this->Auth->loggedIn()) {

        $this->redirect(array(
            'controller' => 'users',
            'action' => 'login'
        ));

    } else {
        $this->redirect(array(
            'controller' => 'users',
            'action' => 'dashboard'
        ));
    }

}


public function login()
{

    $this->layout = 'logindefault';
    $this->set('title_for_layout', 'Account Login');




    if ($this->Auth->login() || $this->Auth->loggedIn()) {


        $lastLogin = $this->Auth->User('lastLogin');

        if ($lastLogin != null) {
            $this->redirect($this->Auth->redirect());
        } else {
            $this->redirect(array(
                'controller' => 'Userinfo',
                'action' => 'gettingstarted'
            ));

        }

    } else {

        if ($this->request->is('post')) {

            $mobileNo = $this->request->data['User']['email'];

            $mobileNo = Utility::addPlusToMobileNo($mobileNo);

            $this->request->data['User']['email'] = $mobileNo;




            if ($this->Auth->login() || $this->Auth->loggedIn()) {
                if ($this->Session->check('Auth.User')) {

                    $this->_setCookie($this->Auth->user('idUser'));

                    $lastLogin = $this->Auth->User('lastLogin');
                    if ($lastLogin != null) {
                        $this->redirect(array(
                            'controller' => 'users',
                            'action' => 'dashboard'
                        ));
                    } else {

                        $this->redirect(array(
                            'controller' => 'Userinfo',
                            'action' => 'gettingstarted'
                        ));

                    }
                }
            } else {
                $this->Session->setFlash('Incorrect Email/Password Combination'); 
            }
        }
    }
}



protected function _setCookie($id)
{
    if (!$this->request->data('User.remember_me')) {
        return false;
    }
    $data = array(
        'username' => $this->request->data('User.email'),
        'password' => $this->request->data('User.password')
    );
    $this->Cookie->write('User', $data, true, '1 week');
    return true;
}


public function logout()
{
    $this->Cookie->delete('User');
    $this->redirect($this->Auth->logout());
}
4

1 回答 1

0
  • 如果您想保护您的应用程序在任何地方使用它,您似乎已经在使用SecurityComponent 。对于 AJAX 表单,仅列出您需要的字段,不要禁用该组件!
  • 把 App::uses('Utility', 'Utility'); 在文件顶部
  • $mobileNo = Utility::addPlusToMobileNo($mobileNo); 应该发生在模型 beforeSave()
  • 如果这应该在世界范围内使用,我假设您需要翻译,这缺少翻译方法调用 __() setFlash('Incorrect Email/Password Combination');
  • 大多数代码都可以并且应该进入模型层
  • 有单元测试吗?如果不添加单元测试,特别是测试数据的验证和错误的数据输入。您希望单元测试的代码覆盖率达到 85% 以上。
  • 您没有遵循 CakePHP 编码标准

如果无法访问整个应用程序代码并进行代码审查(我可以做到),没有办法告诉您更多信息。对于查询,总是只查询你需要的数据,检查生成的 SQL 查询,使用 DebugKit 检查查询次数,发现查询慢,页面渲染慢。

于 2013-07-09T19:13:34.667 回答