We have a requirement to show different content (few links in header section) on a page for logged in and non-logged in users. URL of the page will remain same for both users.
How to design such pages in AEM. How the caching and validation of users would work on each page requests?
@Asutosh_Jena_ , @arunpatidar , @markus_bulla_adobe , @Vijayalakshmi_S , @Pulkit_Jain_ , @Vaibhavi_J , @Ritesh_Mittal
Solved! Go to Solution.
Views
Replies
Total Likes
Hi @Kamal_Kishor!
Depending on the exact use case, there are different approaches to this kind of requirement.
1. You have two groups of users (logged-in vs. anonymous)
2. You have personalized content (menu looks different for every user depending on his permissions).
There are general integration strategies for this requirement.
Let me first outline the differences in cache-ability for 1 and 2:
For 1, the menu is totally cache-able.
For example, you could add a selector to the URL for user with and without permissions (menu.anonymous.html vs. menu.logged-in.html). With this approach, the application will make the decision which menu to integrate for a certain user. You would want to ensure that this mechanism is somewhat secured and can't be tampered with from the public. Please note: this can also be scaled to a certain amount of different groups (= variations of the menu) but I would keep the number as low as possible (probably a low 2-digit number as maximum).
For 2, you won't be able to cache it. You would need to cache a dedicated page for each user and that most probably will outweigh any gains achieved by caching in the first place.
Coming to the integration strategies:
Update:
Two more things to consider:
Hope that helps!
Hi @Kamal_Kishor!
Depending on the exact use case, there are different approaches to this kind of requirement.
1. You have two groups of users (logged-in vs. anonymous)
2. You have personalized content (menu looks different for every user depending on his permissions).
There are general integration strategies for this requirement.
Let me first outline the differences in cache-ability for 1 and 2:
For 1, the menu is totally cache-able.
For example, you could add a selector to the URL for user with and without permissions (menu.anonymous.html vs. menu.logged-in.html). With this approach, the application will make the decision which menu to integrate for a certain user. You would want to ensure that this mechanism is somewhat secured and can't be tampered with from the public. Please note: this can also be scaled to a certain amount of different groups (= variations of the menu) but I would keep the number as low as possible (probably a low 2-digit number as maximum).
For 2, you won't be able to cache it. You would need to cache a dedicated page for each user and that most probably will outweigh any gains achieved by caching in the first place.
Coming to the integration strategies:
Update:
Two more things to consider:
Hope that helps!
thank you. I will try this and let you know if this works for us.
Apart from links in header, we have few pages where we want to show teaser content to anonymous users and then a link beneath the teaser to see the full content. Link will open a login pop-up, on successful login, the page will reload and show the entire content (page url remains same). We are going to migrate a site from php to AEM and we have to maintain the same url behavior.
thanks.
Views
Replies
Total Likes
Views
Replies
Total Likes
You can create 2 different XF(Experience Fragment) one holding navigation content for logged in user and one holding the content for non-logged in user.
By default show the non logged in state content and logged in content can be shown only when you identify the user is logged in which again can be managed in multiple ways such as:
Now coming to user validation on each request, You can set some unique value(let's say session id) in the cookie by encrypting it in AEM using the Crypto support and each time you make a call, you will need to invoke a service on backend which will read the cookie value, decrypt the cookie value and will check if it;s valid or not. If it's a valid session, it will allow you to proceed further, else you can handle the error based on your use case i.e., either you can redirect to 500 error or you can show some error message saying you have been logged out.
AEM Crypto Support: https://www.argildx.com/technology/crypto-support-aem/
Sling Dynamic Include: https://experienceleague.adobe.com/docs/experience-manager-learn/foundation/development/set-up-sling...
https://www.argildx.com/technology/sling-dynamic-include-sdi/
Thanks!
Views
Replies
Total Likes
Hi,
We had a similar requirement, to hide few links(protected links) for an anonymous user.
Our solution was -
1. Create a Sling rewriter (LinkTransformer) to find a protected link (based on cug:repPolicy node ) and add a class(link-protected--hide) and hide link by default
2. On front end side check if a user is logged in and has access to those link then remove the class link-protected--hide
The page is always same and cached.
In your case, you can specify those links from page properties and read them directly in the header (no need to create rewriter if changes are not global) and from end based on user type remove the hidden class or add the hidden classes
That's a neat and straight-forward approach with quite low effort, @arunpatidar. Nice!
Be aware, however, that with this approach "protected" links will be exposed in the HTML source code. So you need to align this implication with the desired/required level of security.
Also, bots (e. g. search engines) or visually impaired visitors (using a screen reader or similar) won't recognize these links as "protected" and eagerly follow them.
That means, that the links (and the respective pages behind them) may be found by users, e. g. through
While talking about security:
Don't just look at the links to you target pages, but also at these pages itself. Depending on your use case, there should be a mechanism in place to make sure that only logged-in users with according permissions are able to reach these pages.
Views
Replies
Total Likes
Views
Replies
Total Likes
@markus_bulla_adobe is right, based on your use case you need to handle accessibility and other security aspects. Though not a big effort but still required consideration.
Views
Replies
Total Likes