我对symfony2和FOSUserBundle有一个非常奇怪的问题。
我可以使用/ en / logout注销,但不能使用/ nl / logout或/ fr / logout注销。
当我尝试使用nl或fr注销时,我得到:
You must activate the logout in your security firewall configuration.
虽然我配置了它。我似乎无法理解为什么/ en / logout工作而其余部分没有。
这是我的代码:
security:
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
encoders:
FOS\UserBundle\Model\UserInterface: sha512
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
check_path: fos_user_security_check
default_target_path: /%locale%/login
always_use_default_target_path: true
failure_path: /%locale%/login
logout:
path: /%locale%/logout
target: homepage
anonymous: true
user bundle > FOS
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
prefix: /{_locale}
requirements:
_locale: fr|nl|en
class LoginController extends Controller {
/**
* @Route("{_locale}/logout-test", name="logout", defaults={"_locale"="en"} , requirements = {"_locale" = "fr|en|nl"})
* @Template()
*/
public function logoutAction()
{
$test = "";
#throw new \RuntimeException('You must activate the logout in your security firewall configuration.');
#return $this->redirect($this->generateUrl('homepage'));;
}
}
任何人都可以帮助我,或者告诉我下一步该去哪儿?非常感谢
答案 0 :(得分:31)
在配置文件中,您需要使用路由而不是URL。如果以“/”开头,则将其视为URL,否则将其视为路径。如果您使用路由而不是URL,则会自动处理区域设置。例如,这是我的security.yml配置:
security:
public:
pattern: ^/
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
provider: fos_userbundle
csrf_provider: form.csrf_provider
default_target_path: index
anonymous: true
logout:
path: fos_user_security_logout
target: index
答案 1 :(得分:0)
除了@ jfcartier的回答:
之外,我留待将来参考如果您需要自定义logout
路径而不是fos_user_security_logout
:
# app/config/security.yml
...
logout:
path: my_logout
target: homepage
...然后您还需要在routing.yml
中定义它:
# app/config/routing.yml
app:
resource: "@AppBundle/Controller/"
type: annotation
my_logout:
path: /logout
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
但是,请确保它在fos_user
之前定义 - 否则您将收到相同的错误:您必须在安全防火墙配置中激活注销。