उपयोगकर्ता को सफलतापूर्वक लॉग इन करने के बाद मुझे क्रियाओं का एक सेट करने की आवश्यकता है। इसमें डेटाबेस से डेटा लोड करना और सत्र में संग्रहीत करना शामिल है।Symfony2: सफल लॉगिन ईवेंट के बाद, क्रियाओं का सेट
इसे लागू करने का सबसे अच्छा तरीका क्या है?
उपयोगकर्ता को सफलतापूर्वक लॉग इन करने के बाद मुझे क्रियाओं का एक सेट करने की आवश्यकता है। इसमें डेटाबेस से डेटा लोड करना और सत्र में संग्रहीत करना शामिल है।Symfony2: सफल लॉगिन ईवेंट के बाद, क्रियाओं का सेट
इसे लागू करने का सबसे अच्छा तरीका क्या है?
आप security.interactive_login
ईवेंट में श्रोता जोड़ सकते हैं।
इस तरह अपने श्रोता को संलग्न करें। इस उदाहरण में मैं सुरक्षा संदर्भ और सत्र को निर्भरता के रूप में भी पास करता हूं।
नोट: SecurityContext Symfony 2.6 के रूप में मान्य नहीं है। http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements
parameters:
# ...
account.security_listener.class: Company\AccountBundle\Listener\SecurityListener
services:
# ...
account.security_listener:
class: %account.security_listener.class%
arguments: ['@security.context', '@session']
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin }
देखें और अपने श्रोता में आप स्टोर कर सकते हैं जो कुछ भी आप सत्र पर चाहते हैं। इस मामले में मैंने उपयोगकर्ताओं को टाइमज़ोन सेट किया है।
<?php
namespace Company\AccountBundle\Listener;
use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
class SecurityListener
{
public function __construct(SecurityContextInterface $security, Session $session)
{
$this->security = $security;
$this->session = $session;
}
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$timezone = $this->security->getToken()->getUser()->getTimezone();
if (empty($timezone)) {
$timezone = 'UTC';
}
$this->session->set('timezone', $timezone);
}
}
ऐसा लगता है कि यह चाल करेगा। क्या कक्षा में घोषित करने की मुझे कोई निर्भरता है? – jbsound
नहीं, केवल आपकी अपनी निर्भरताएं (इकाई प्रबंधक शायद)। – MDrollette
थोड़ा और खोदने के बाद, ऐसा लगता है कि ऐसी निर्भरताएं हैं जिन्हें निर्दिष्ट करने की आवश्यकता है। इस आलेख को मिला जो एक पूर्ण कोड कार्यान्वयन दिखाता है: http://www.metod.si/login-event-listener-in-symfony2/ – jbsound
तुम भी घटना से ही उपयोगकर्ता उदाहरण प्राप्त कर सके, टोकन भंडारण इंजेक्षन करने की कोई जरूरत!
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$event->getAuthenticationToken()->getUser()
}
एक सेवा का उपयोग कर यह करने के लिए कैसे: http://stackoverflow.com/questions/8308050/how-to-disable-redirection-after-login-check-in-symfony-2/8312188#8312188 – unairoldan