Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing the logged-in user in a template

I'm using FOSuserbundle to get started with User registration https://github.com/FriendsOfSymfony/FOSUserBundle

I've got it registering / logging in and out. What I want to do now is grab the logged in users data and present it on every page of my site. Like "Hi username" in the header type of thing.

It seems like embedding a controller in my app/Resources/views/base.html.twig is the best way to do this http://symfony.com/doc/current/book/templating.html#embedding-controllers

So I wrote my controller to access the user profile data. What I can't figure out is how to access FOS methods in my embedded controller. So from my Acme/UserBundle/Controller/UserController.php I want to do this:

public function showAction() {     $user = $this->container->get('security.context')->getToken()->getUser();     if (!is_object($user) || !$user instanceof UserInterface) {         throw new AccessDeniedException(                'This user does not have access to this section.');     }      return $this->container->get('templating')       ->renderResponse('FOSUserBundle:Profile:show.html.'.$this->container       ->getParameter('fos_user.template.engine'), array('user' => $user)); } 

which I grabbed from: vendor/bundles/FOS/UserBundle/Controller/ProfileController.php

like image 758
ed209 Avatar asked Sep 18 '11 18:09

ed209


People also ask

How to check user login in django template?

Check the Logged in User in Views in Django We can use request. user. is_authenticated to check if the user is logged in or not. If the user is logged in, it will return True .

What is request path in Django?

request. path gives you the entire path so it would be /something/someting/contact/ if the path looks like that. that is.


1 Answers

You can access user data directly in the twig template without requesting anything in the controller. The user is accessible like that : app.user.

Now, you can access every property of the user. For example, you can access the username like that : app.user.username.

Warning, if the user is not logged, the app.user is null.

If you want to check if the user is logged, you can use the is_granted twig function. For example, if you want to check if the user has ROLE_ADMIN, you just have to do is_granted("ROLE_ADMIN").

So, in every of your pages you can do :

{% if is_granted("ROLE") %}     Hi {{ app.user.username }} {% endif %} 
like image 179
egeloen Avatar answered Sep 20 '22 14:09

egeloen