我正在尝试创建一个使用Zend框架的Web服务。 API基于REST,并使用Zend_Rest_Controller作为基类。我希望有用户管理和会话,为此我使用以下代码: 登录(POST)
// user id and password fetched first
$users = new Application_Model_DbTable_UserInfo();
$auth = Zend_Auth::getInstance();
$authAdapter = new Zend_Auth_Adapter_DbTable($users->getAdapter(),'users');
$authAdapter->setIdentityColumn('userid')
->setCredentialColumn('password');
$authAdapter->setIdentity($userid)
->setCredential($pwd);
$result = $auth->authenticate($authAdapter);
if($result->isValid()){
Zend_Session::rememberMe(604800);
$storage = new Zend_Auth_Storage_Session();
$usa = $authAdapter->getResultRowObject();
$auth->getStorage()->write($usa);
$authSession = new Zend_Session_Namespace('Zend_Auth');
$authSession->setExpirationSeconds(60*60);
}
并且在使用例如访问服务时一些GET方法我希望通过以下代码检查是否存在有效会话:
$auth = Zend_Auth::getInstance();
if(!$auth->hasIdentity())
{
// error handling etc.
}
我从未获得过身份,因此该服务无效。
我已严格遵循ZF身份验证的指导,但REST内容是否需要考虑其他项目?
答案 0 :(得分:0)
我知道我没有回答你的问题,但是如果你真的计划实现一个真正的REST接口(这意味着它可以使你能够很好地扩展),你可能最好忘记会话并使用Zend_Auth你上面描述的方式。
看看这里,已经讨论过REST接口和身份验证的内容: Can you help me understand this? "Common REST Mistakes: Sessions are irrelevant"
简而言之,引用上面的Q / A线程,“要成为RESTful,每个HTTP请求应该自己携带足够的信息,以便其接收者处理它与HTTP的无状态特性完全协调”。我真的觉得借这个。