CakePHP的2.1 - 作为一个Web应用程序和REST服务与认证(CakePHP 2.1 -

2019-07-30 01:18发布

我目前正在开发其目前的形式验证的CakePHP程序。 我也想开了这个应用程序对其他应用程序通过REST连接。

我知道,CakePHP的是能够做到这一点使用

Router::mapResources() 

Router::parseExtensions() 

不过,我不知道该如何说与基本或摘要HTTP认证得到这个工作。

我有在AppController.php以下

public $components = array(
    'Session',
    'Auth' => array(
        'authenticate' => array(
            'Form'
        ),
        'loginAction' => array(
            'admin' => false,
            'controller' => 'users',
            'action' => 'login'
        ),
        'loginRedirect' => array(
            'controller' => 'users',
            'action' => 'home'
        )
    )
);

如果该身份验证领域,我曾在“基本” - 例如登录到基于Web版本时,我得到一个HTTP认证对话框,而不是基于web的表单。

什么是这样做的最佳方式? 我可以在那一刻想到的唯一方法是创建一个单独的ApiController和做手工验证?

任何建议将是真棒。

更新:

这是我修改后的代码是给我正确的水煤浆 - 我敢肯定,应该有更好的方式来做到这一点。

class AppController extends Controller {

    public $components = array(
        'Session',
        'RequestHandler',
        'Auth' => array(
            'loginAction' => array(
                'admin' => false,
                'controller' => 'users',
                'action' => 'login'
            ),
            'loginRedirect' => array(
                'controller' => 'users',
                'action' => 'home'
            )
        )
    );

    public $helpers = array('Html', 'Form', 'Session');

    public function beforeFilter() {
        $header = $_SERVER['HTTP_AUTHORIZATION'];
        if($header) {
            $this->Auth->authenticate = array('Basic');
        }
    }

}

Answer 1:

public function beforeFilter() {

    // Change the authentication if using REST
    if($this->params['ext'] == 'json') {
        $this->Auth->authenticate = array('Basic');
    }

}

此检查一个JSON扩展,如果请求包含它 - 然后切换到基本身份验证。



Answer 2:

检查CakePHP的书的认证章。

CakePHP的支持形式,基本和摘要,你可以创建自己的验证对象,并使用它们。

您可以加载多个验证对象和蛋糕将登录时,他们的第一个返回true在auth处理用户。 你只需要加载表单身份验证的对象,不知道为什么你的HTTP认证对话框。 这是不可能的蛋糕是问题。



文章来源: CakePHP 2.1 - As a web application and REST service with Authentication