我是Symfony 2的新手,之前从未使用任何框架。
我创建了2个捆绑包,一个用于核心网站,其中url是以/
为根DefaultBundle
,然后我创建了一个新的UserBundle
并将所有路由设置为/user/
登录页面是/user/login
,它运行正常。
到目前为止,我能够登录用户,似乎每件事都有效。
问题确实是,如何在DefaultBundle
登录用户登录,因此我在前端网站的右上角显示了Welcome User
而不是login/register
个链接
P.S。我不需要FOSuserBundle作为答案,
下面的来自我的security.yml文件
jms_security_extra:
secure_all_services: false
expressions: true
security:
encoders:
Aala\Vital\UserBundle\Entity\User:
algorithm: plaintext
# encode_as_base64: false
# iterations: 1
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_MOD: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_MOD, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
user_area:
entity: {class: AalaVitalUserBundle:User, property: email}
firewalls:
login:
pattern: ^/user/login$
security: false
anonymous: true
user_area:
pattern: ^/user
form_login:
login_path: /user/login
check_path: /user/login_check
post_only: true
default_target_path: /user/
logout:
path: /user/logout
target: /user/
main:
pattern: ^/
security: true
anonymous: ~
access_control:
- { path: /.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/user, roles: ROLE_USER }
我的文件夹结构如下
-src
-Aala
-Vital
-FronendBundle
-UserBundle
这可以通过依赖注入来完成吗?如果是的话怎么做......
答案 0 :(得分:2)
要在两个防火墙之间共享身份验证,请使用context
。以下是我的security.yml文件中更新的防火墙部分
firewalls:
login:
pattern: ^/user/login$
security: false
anonymous: true
user_area:
pattern: ^/user
context: primary_auth
form_login:
login_path: /user/login
check_path: /user/login_check
post_only: true
default_target_path: /user/
logout:
path: /user/logout
target: /user/
main:
pattern: ^/
context: primary_auth
security: true
anonymous: ~
答案 1 :(得分:0)
根据控制器中的文档:
http://symfony.com/doc/current/book/security.html#retrieving-the-user-object
public function indexAction()
{
$user = $this->getUser();
if($user->isAuthenticated()) {
// Stuff
}
}
答案 2 :(得分:0)
您需要将两个捆绑包的路由放在同一防火墙后面才能使$user = $this->getUser();
正常工作。然后,如果您希望网站的某个部分未经身份验证,则可以允许使用ACL进行匿名访问。
firewalls:
site:
pattern: ^/
anonymous: ~
form_login:
login_path: /user/login
check_path: /user/login_check
post_only: true
default_target_path: /
logout:
path: /user/logout
target: /user/
access_control:
- { path: ^/user/, roles: ROLE_USER}
答案 3 :(得分:0)
您可以在dosc here中找到它。
{% if is_granted("IS_AUTHENTICATED_REMEMBERED") %}
{{ 'Welcome ' ~ app.user.username }}
<a href="{{ path('logout_route') }}">Logout</a>
{% else %}
<a href="{{ path('login_route') }}">Login</a>
{% endif %}
更改login_route
和logout_route
以符合您的申请路线。
为什么不想使用FOSUserBundle?这是一个非常好的捆绑,由核心成员编写,例如你可以找到这段代码right here。