使用Ajax的CakePHP AuthComponent登录没有表单?

时间:2012-07-16 21:12:55

标签: ajax json cakephp authentication

我想使用CakePHP 2.2创建一个应用程序,允许非浏览器客户端连接和存储/访问数据。我一直在查看用户使用UserController中的这段代码登录的示例:

public function login()
{
    if($this->request->is('post'))
    {
        if($this->Auth->login())
        {
            $this->Session->setFlash('Login Passed');
        }
        else
       {
            $this->Session->setFlash('Login Failed');
        }
    }
}

这是通过浏览器在浏览器上显示表单来完成的,用户填写“用户名”和“密码”,然后单击按钮进行提交。我知道使用Javascript和Ajax,你可以“序列化”一个表单并将其发送到服务器,但是假设我不想(或不能)使用表单而只是让客户端发送两位信息:“username”和“密码”,如何从上面的“登录”方法处理这些数据?我知道Auth->login采用了可选参数$user,但有没有办法从用户名/密码组合中获取$user,以便我可以将其传递给Auth->login?我想象这样的事情:

public function login()
{
    if($this->request->is('post'))
    {
        if($this->Auth->login())
        {
            $this->Session->setFlash('Login Passed');
        }
        else
        {
            $this->Session->setFlash('Login Failed');
        }
    }
    else if ($this->RequestHandler->isAjax())
    {
        $tmpUser = getUser ('username', 'password'); // ????? ===> Whatever call is needed here.
        if($this->Auth->login($tmpUser))
        {
            $this->Session->setFlash('Login Passed');
        }
        else
        {
            $this->Session->setFlash('Login Failed');
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您可以在使用Ajax登录实现Auth时使用AuthComponent :: $ajaxLogin属性。  除此之外,您可以尝试以下代码:

public function login()
{
if($this->request->is('post'))
{
    if($this->Auth->login())
    {
        $this->Session->setFlash('Login Passed');
    }
    else
    {
        $this->Session->setFlash('Login Failed');
    }
}
else if ($this->RequestHandler->isAjax())
{
    $tmpUser['User']['username'] = $this->request->params['username'];
    $tmpUser['User']['password'] = $this->request->params['password'];
    if($this->Auth->login($tmpUser))
    {
        $this->Session->setFlash('Login Passed');
    }
    else
    {
        $this->Session->setFlash('Login Failed');
    }
}
}

您可以使用firebug控制台检查响应。