فهرست منبع

fix listener refresh token

Guillermo Espinoza 8 سال پیش
والد
کامیت
42c8e68283
3فایلهای تغییر یافته به همراه24 افزوده شده و 59 حذف شده
  1. 0 46
      EventListener/DynamicRelationSubscriber.php
  2. 23 7
      EventListener/RequestListener.php
  3. 1 6
      Resources/config/services.yml

+ 0 - 46
EventListener/DynamicRelationSubscriber.php

@@ -1,46 +0,0 @@
-<?php
-
-namespace Base\OAuthClientBundle\EventListener;
-
-use Doctrine\ORM\Events;
-use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
-use Doctrine\Common\EventSubscriber;
-
-class DynamicRelationSubscriber implements EventSubscriber
-{
-    /**
-     * {@inheritDoc}
-     */
-    public function getSubscribedEvents()
-    {
-        return array(
-            Events::loadClassMetadata,
-        );
-    }
-
-    /**
-     * @param LoadClassMetadataEventArgs $eventArgs
-     */
-    public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
-    {
-        // the $metadata is the whole mapping info for this class
-        $metadata = $eventArgs->getClassMetadata();
-        $classes = array(
-            'Base\OAuthServerBundle\Entity\AccessToken',
-            'Base\OAuthServerBundle\Entity\AuthCode',
-            'Base\OAuthServerBundle\Entity\RefreshToken'
-        );
-        
-        if (!in_array($metadata->getName(), $classes)) {
-            return;
-        }
-        
-        $userClass = 'Base\UserBundle\Entity\User';
-        $OAuthUserClass = 'Base\OAuthClientBundle\Security\Core\User\CustomOAuthUser';
-        
-        $metadata->mapManyToOne(array(
-            'targetEntity'  => class_exists($userClass) ? $userClass : $OAuthUserClass,
-            'fieldName'     => 'user'
-        ));
-    }
-}

+ 23 - 7
EventListener/RequestListener.php

@@ -3,26 +3,39 @@
 namespace Base\OAuthClientBundle\EventListener;
 
 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
+use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorage;
 
 class RequestListener
 {
 
+    /**
+     * @var TokenStorage
+     */
     protected $securityTokenStorage;
 
+    /**
+     * @var string
+     */
     protected $client_id;
     
+    /**
+     * @var string
+     */
     protected $client_secret;
     
+    /**
+     * @var string
+     */
     protected $access_token_url;
 
 
     /**
-     * @param SecurityTokenStorage $securityTokenStorage
+     * @param TokenStorage $securityTokenStorage
      * @param string $client_id
      * @param string $client_secret
      * @param string $access_token_url
      */
-    public function __construct($securityTokenStorage, $client_id, $client_secret, $access_token_url)
+    public function __construct(TokenStorage $securityTokenStorage, $client_id, $client_secret, $access_token_url)
     {
         $this->securityTokenStorage = $securityTokenStorage;
         $this->client_id = $client_id;
@@ -32,6 +45,7 @@ class RequestListener
 
     /**
      * @param GetResponseEvent $event
+     * 
      * @return type
      */
     public function onKernelRequest(GetResponseEvent $event)
@@ -59,11 +73,13 @@ class RequestListener
 
             $newToken = json_decode($response, true);
             
-            $token->setAccessToken($newToken['access_token']);
-            $token->setRefreshToken($newToken['refresh_token']);
-            $token->setExpiresIn($newToken['expires_in']);
-
-            $this->securityTokenStorage->setToken($token);
+            if (isset($newToken['access_token']) && isset($newToken['refresh_token']) && isset($newToken['expires_in'])) {
+                $token->setAccessToken($newToken['access_token']);
+                $token->setRefreshToken($newToken['refresh_token']);
+                $token->setExpiresIn($newToken['expires_in']);
+                
+                $this->securityTokenStorage->setToken($token);
+            }
         }
         
         return;

+ 1 - 6
Resources/config/services.yml

@@ -4,9 +4,4 @@ services:
         class: Base\OAuthClientBundle\EventListener\RequestListener
         tags:
             - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
-        arguments: [ '@security.token_storage', '%client_id%', '%client_secret%', '%access_token_url%' ]
-        
-#    oauth.user.mapping.listener:
-#        class: Base\OAuthClientBundle\EventListener\DynamicRelationSubscriber
-#        tags:
-#            - { name: doctrine.event_listener, event: loadClassMetadata }
+        arguments: [ '@security.token_storage', '%client_id%', '%client_secret%', '%access_token_url%' ]