来自Symfony 2.3安全文档:
如果拒绝访问,系统将尝试验证用户(如果尚未验证)(例如,将用户重定向到登录页面).如果用户已登录,将显示403"访问被拒绝"错误页面.有关更多信息,请参见如何自定义错误页面.
我目前正在使用access_control几条路线的规则.我想通知匿名用户,如果他们被重定向到登录路线,并显示" 您必须登录才能访问该页面 " 的消息.我已经阅读了几次安全文档并且没有找到与此相关的任何内容.我忽略了什么吗?
如果没有,只有当他们被重定向到登录时(即不是他们只是未经授权的角色),当他们被access_control规则停止时通知用户的最佳方式是什么?
编辑:
为了澄清,我特别询问如何检查重定向是否是由access_control规则引起的(如果可能的话,最好是在树枝上).
我一直在从Symfony Book中学习本教程来管理我的用户.
现在,我想在登录成功后设置一条flash消息,或者如果有人试图访问禁区.
我的理解是,控制器内部不管理身份验证和授权.因此,我不知道在哪里放置我的代码来显示简单的"抱歉,你没有连接"的消息.
使用Symfony2我已经实现了一个AJAX操作来管理我的应用程序中的一些书签(添加/删除).因此,用户需要进行身份验证才能继续.我有一个解决方案,将用户重定向到登录页面,但我认为最好使用事件来处理此重定向.
实际解决方案
检查用户的身份验证的方式与FOSUserBundle中的方式相同.
路由:
fbn_guide_manage_bookmark:
path: /bookmark/manage
defaults: { _controller: FBNGuideBundle:Guide:managebookmark }
options:
expose: true
requirements:
_method: POST
Run Code Online (Sandbox Code Playgroud)
控制器:
public function manageBookmarkAction(Request $request)
{
if ($request->isXmlHttpRequest()) {
$user = $this->getUser();
if (!is_object($user) || !$user instanceof UserInterface) {
return new JsonResponse(array('status' => 'login'));
}
// DO THE STUFF
}
}
Run Code Online (Sandbox Code Playgroud)
jQuery:
$(function() {
$('#bookmark').click(function() {
$.ajax({
type: 'POST',
url: Routing.generate('fbn_guide_manage_bookmark'),
data : xxxx, // SOME DATA
success: function(data) {
if (data.status == 'login') {
var redirect = Routing.generate('fos_user_security_login');
window.location.replace(redirect);
} else …Run Code Online (Sandbox Code Playgroud)