CakePHP Stateless(Basic)Auth,在哪里调用$ this-> Auth-> login()?

时间:2014-02-02 07:39:27

标签: php cakephp basic-authentication cakephp-2.4

我的CakePHP v2.4.X应用程序支持基本身份验证和表单身份验证(表单适用于Web用户,而Basic适用于Android应用程序的无状态访问)。

AppController.php包含以下$ components声明:

public $components = array(
        'Auth' => array(
                'authenticate' => array(
                        'Basic',
                        'Form',
                ),
        ),
);

来自执行无状态Basic Auth的文档:     “在您的登录功能中,只需拨打$ this-> Auth-> login(),无需检查POST数据。”

我的问题是,如果用户使用Basic Auth登录,他们永远不会触发用户/登录 - 所以我不确定在哪里放置$ this-> Auth-> login()函数。

我是否只是将此代码放在AppController / beforeFilter()中,如果当前用户未登录,我每次都尝试登录?即:

if($this->Auth->loggedIn() == false)
{
    $this->Auth->login();
}

这对我来说似乎不对,因为如果用户使用表单登录,他们最终会调用$ this-> Auth-> login();两次[一次来自AppController / beforeFilter(),再一次来自UsersController / login()]。

此外,当简单地加载登录(通过GET)时,系统将尝试登录它们,因此返回错误消息。

我也不确定如何确定用户是否通过Basic(而不是Form)登录,因此只有在使用Basic时才将“AuthComponent :: $ sessionKey”设置为false。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

与基本身份验证相关的manual section与您所说的不符。由于2.4 basic / digest auth根本不需要登录操作。只需在数组中包含Basic即可获得auth config的“authenticate”密钥就足够了。在尝试访问受保护的操作时,它会自动导致cake检查所需的凭据,如果没有提供凭据或无效的凭据,则会向客户端返回适当的头。

同时使用BasicForm身份验证器可能会出现问题。我建议在beforeFilter中修改auth config,以便通过使用适当的条件有条件地使用其中任何一个来检查请求是否来自移动应用程序。