我正在authentication
为在ZF2
.
我需要有更多选项来根据调用的服务对用户进行身份验证。
对于从浏览器访问的 Web 应用程序的 IE,我将通过 Ldap 进行身份验证,对于 API 服务,我将检查标头中的用户凭据。
我创建了一个abstract controller
检查用户是否经过身份验证;如果不是,它将被重定向到登录页面。
模块中需要相同身份验证过程的所有控制器都将扩展此类。
成功登录后,我需要保存原始请求以将其重定向回它。
我的问题是:
1. 抽象控制器 -> onDispatch() 方法放置它的地方是正确的吗?
我发现的每一个解决方案总是在Module.php
. 为了区分 auth 方法,他们需要检查请求的控制器是否匹配,因为 Module.php 总是被调用。在控制器中设置它不是“更干净”吗?
2.我应该使用重定向还是转发从原始控制器传递到登录控制器然后返回?
我不介意浏览器栏中的 url 更改,只是寻找最好和最快的解决方案,同时保持原始请求。
3.将uri存储在会话类中(来自auth模块)是否正确?有什么方法可以保存整个请求(包括可能需要的 POST 数据)?
这是抽象控制器:
abstract class AbstractAuthActionController extends AbstractActionController {
public function onDispatch(MvcEvent $e) {
$serviceManager = $e->getApplication ()->getServiceManager ();
$auth = $serviceManager->get ( 'LdapAuth\Client\Ldap' );
if (! $auth->hasIdentity ()) {
$uri = $e->getRequest()->getRequestUri();
$callBackFunction = $this->getLdap ()->getCallBackFunction (); // = new SessionData();
$callBackFunction::setOriginalUri($uri); // function to store temporarly the uri
return $this->redirect ()->toRoute ( 'ldap-login-route' );
} else {
return parent::onDispatch ( $e );
}
}
}