我正在尝试构建一个用户可以在浏览器中查看的 Web 应用程序,但也有一个 API 供开发人员与我的应用程序交互。我的问题是如何根据 CakePHP 中的请求类型更改身份验证?
我希望我的应用程序通过表单身份验证提示使用该站点的用户,但是当请求带有“.json”时使用基本身份验证。
我在我的 AppController 中试过这个:
class AppController extends Controller {
public $components = array(
'Session',
'Auth' => array(
'loginRedirect' => array(
'controller' => 'journeys',
'action' => 'index'
),
'logoutRedirect' => array(
'controller' => 'pages',
'action' => 'display', 'home'
)
),
'RequestHandler'
);
public function beforeFilter() {
if($this->params['ext'] == 'json') {
$this->Auth->authenticate = array('Basic');
} else {
$this->Auth->authenticate = array('Form');
}
$this->Auth->allow('display');
}
}
我已经检查了 beforeFilter 中的子句是否有效并且它确实有效,但无论我尝试在我的应用程序中访问什么 URL,我似乎都被重定向到我的表单身份验证
我的 UsersController 文件中的登录功能如下所示:
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
}
我已阅读 CakePHP 网站上的文档,但似乎找不到对我有帮助的示例。任何帮助,将不胜感激。
为更正代码和更多信息而编辑
我继续研究这个问题,我注意到如果我记录以下值:
$this->Auth->authenticate
在 beforeFilter 中它说它是基本的,但它仍然将我发送到表单登录。