कस्टम लॉग-इन के लिए केवल निम्नलिखित कोड आवश्यक है।
$token = new UsernamePasswordToken($user, null, 'main', $user->getRoles());
$this->get("security.context")->setToken($token);
return $this->redirect($this->generateUrl('sonata_user_profile_show'));
यह सुरक्षा संदर्भ में उपयोगकर्ता नाम पासवर्डवर्ड टोकन सेट कर रहा है। यह टोकन (और उपयोगकर्ता भी) को क्रमबद्ध किया जाएगा और सत्र में रखा जाएगा। अगले पृष्ठ पर टोकन सत्र से अनियमित हो जाएगा और, भी unserialized, उपयोगकर्ता ताज़ा किया जाएगा।
FOSUserBundle में उपयोगकर्ता-प्रदाता अनिश्चित उपयोगकर्ता की आईडी का उपयोग करके यह ताज़ा करता है।
इसके अलावा, कुछ मामलों में Doctrine2 मूल इकाई वर्ग की बजाय इकाई-वर्ग के रूप में प्रॉक्सी-वर्ग का उपयोग करता है। यह प्रॉक्सी-क्लास एक जटिल आलसी लोडिंग जटिल कार्यान्वयन द्वारा इकाई के "getId()" फ़ंक्शन को ओवरराइट करता है।
यह एक साथ इस तथ्य का कारण बन सकता है कि, जब आप UserPasswordToken में Doctrine2 प्रॉक्सी-ऑब्जेक्ट डालते हैं, तो serialized के "getId()" और फिर unserialized प्रॉक्सी-ऑब्जेक्ट मूल आईडी वापस नहीं करेगा। जब ऐसा होता है तो उपयोगकर्ता को उपयोगकर्ता-प्रदाता द्वारा रीफ्रेश नहीं किया जा सकता है, और टोकन अमान्य हो जाएगा।
इसके लिए एक फिक्स एक कस्टम उपयोगकर्ता-प्रदाता बना रहा है जो उपयोगकर्ता नाम (या एक अन्य अनूठी संपत्ति) का उपयोग करके ताज़ा करके "refreshUser()" को ओवरराइट करता है।
//...
class UserProvider extends FOSUserProvider
{
/**
* {@inheritDoc}
*/
public function refreshUser(SecurityUserInterface $user)
{
if (!$user instanceof User) {
throw new UnsupportedUserException(sprintf('Expected an instance of User, but got "%s".', get_class($user)));
}
if (null === $reloadedUser = $this->userManager->findUserBy(array('username' => $user->getUsername()))) {
throw new UsernameNotFoundException(sprintf('User with username "%s" could not be reloaded.', $user->getUsername()));
}
return $reloadedUser;
}
}
क्या आप सिम्फनी 2.1 का उपयोग कर रहे हैं? यदि ऐसा है, तो निम्न पंक्तियों को जोड़ने का प्रयास करें: '$ session-> सेट ('_ security_'। $ फ़ायरवॉलनाम, serialize ($ टोकन)); $ सत्र-> सहेजें(); ' – Squazic
मुझे इस तरह की एक समस्या थी जिसमें एएसपी.NET वेब ऐप था जिस पर मैं काम कर रहा था। मैंने अपने कैश को अपने ब्राउज़र में साफ़ कर दिया और फिर से काम करना शुरू कर दिया। उम्मीद है कि यह आपके लिए भी आसान है :) – Anonymous
@ स्क्वैज़िक हां, मैं सिम्फनी 2.1 का उपयोग कर रहा हूं। मैंने सत्र स्निपेट जोड़ा, लेकिन दुर्भाग्य से यह काम नहीं किया। –