2015-06-09 7 views
1

Я могу интегрировать fosuserbundle и hwioauthbundle на основе документации danvbe. Я могу войти в систему по имени пользователя/паролю, facebook и твиттеру. Я также могу подключить имя пользователя к своей учетной записи facebook/twitter. Например, на странице профиля пользователя я пытаюсь подключить свое имя пользователя к моей учетной записи facebook. после его подключения я застрял на странице (url: http://localhost/Projects/symfony/web/app_dev.php/connect/service/facebook?key=12345678) с сообщением, которое будет отображаться на странице «Успешно подключено к учетной записи» моей учетной записи »!». нет кнопки для перенаправления в любом месте. как перенаправить на страницу профиля пользователя? Вот мои настройки: security.yml:HWIOAuthBundle - Не удается перенаправить после успешного соединения

providers: 
    fos_userbundle: 
     id: fos_user.user_provider.username_email 
firewalls: 
    main: 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
      login_path: /login 
      csrf_provider: form.csrf_provider 
     logout: true 
     anonymous: true 
     oauth: 
      resource_owners: 
       facebook:   "/login/check-facebook" 
       twitter:   "/login/check-twitter" 
      login_path:  /login 
      use_forward:  false 
      failure_path:  /login 
      default_target_path: /profile 

      oauth_user_provider: 
       service: tf_user_provider 

routing.yml:

fos_user_security: 
    resource: "@FOSUserBundle/Resources/config/routing/security.xml" 

fos_user_profile: 
    resource: "@FOSUserBundle/Resources/config/routing/profile.xml" 
    prefix: /profile 

fos_user_register: 
    resource: "@FOSUserBundle/Resources/config/routing/registration.xml" 
    prefix: /register 

fos_user_resetting: 
    resource: "@FOSUserBundle/Resources/config/routing/resetting.xml" 
    prefix: /resetting 

fos_user_change_password: 
    resource: "@FOSUserBundle/Resources/config/routing/change_password.xml" 
    prefix: /profile 

hwi_oauth_redirect: 
    resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml" 
    prefix: /connect 

hwi_oauth_login: 
    resource: "@HWIOAuthBundle/Resources/config/routing/login.xml" 
    prefix: /login 

hwi_oauth_connect: 
    resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml" 
    prefix: /connect  

hwi_oauth_facebook_login: 
    pattern: /connect/facebook 

facebook_login: 
    pattern: /login/check-facebook 

twitter_login: 
    pattern: /login/check-twitter 

config.yml:

fos_user: 
    db_driver: orm 
    firewall_name: main 
    user_class: Acme\UserBundle\Entity\User 
    registration: 
     form: 
      type: tf_user_registration 
    profile: 
     form: 
      type: tf_user_registration 
hwi_oauth: 
    firewall_name: main 
    resource_owners: 
     facebook: 
      type:   facebook 
      client_id:  "id" 
      client_secret: "secret" 
      scope:   "" 
     twitter: 
      type:   twitter 
      client_id:  "id" 
      client_secret: "secret" 
    fosub: 
     # try 30 times to check if a username is available 
     username_iterations: 30 
     #mapping between resource owners and properties 
     properties: 
      facebook: facebookId 
      twitter: twitterId 
    # if you want to use 'connect' and do not use the FOSUB integration, configure these separately 
    connect: 
     account_connector: tf_user_provider 

     confirmation: true # should show confirmation page or not 

    # optional HTTP Client configuration 
    http_client: 
     timeout:  100 
     verify_peer: true 
     ignore_errors: true 
     max_redirects: 5 

ответ

0

HWIOAuthBundle не имеют такой функциональности.

Простое решение - это javascript redirect в вендоре/hwi/oauth-bundle/HWI/Bundle/OAuthBundle/Resources/views/Connect/connect_success.html.twig.

Или это решение (не самый лучший, но работа для меня отлично)

Сформировать новый пустой OAuthBundle

php app/console generate:bundle

Override HWIOAuthBundle

public function getParent() 
{ 
    return 'HWIOAuthBundle'; 
} 

Override ConnectController

class ConnectController extends \HWI\Bundle\OAuthBundle\Controller\ConnectController

Override connectServiceAction. Перепишите часть, где обрабатывается соединение успеха и вернуть RedirectResponse

 // Show confirmation page? 
    if (!$this->container->getParameter('hwi_oauth.connect.confirmation')) { 
     goto show_confirmation_page; 
    } 

    // Handle the form 
    /** @var $form FormInterface */ 
    $form = $this->container->get('form.factory') 
     ->createBuilder('form') 
     ->getForm(); 

    if ($request->isMethod('POST')) { 
     $form->bind($request); 

     if ($form->isValid()) { 
      show_confirmation_page: 

      /** @var $currentToken OAuthToken */ 
      $currentToken = $this->container->get('security.context')->getToken(); 
      $currentUser = $currentToken->getUser(); 

      $this->container->get('hwi_oauth.account.connector')->connect($currentUser, $userInformation); 
      // new logic 
      $this->container->get('session')->getFlashBag()->set('success', 'Successfully connected the '. $resourceOwner->getName() .' account'); 
      return new RedirectResponse($this->generate('connections')); 
      // old logic 
      //if ($currentToken instanceof OAuthToken) { 
      // // Update user token with new details 
      // $this->authenticateUser($request, $currentUser, $service, $currentToken->getRawToken(), false); 
      //} 

      //return $this->container->get('templating')->renderResponse('HWIOAuthBundle:Connect:connect_success.html.' . $this->getTemplatingEngine(), array(
      // 'userInformation' => $userInformation, 
      //)); 
     } 
    } 

Наилучшим решением является вилка и внести свой вклад логику событий в HWIOAuthBundle хранилище;)

0

Просто скопируйте

vendor/hwi/oauth-bundle/HWI/Bundle/OAuthBundle/Resources/views/ 

содержание

app/Resources/HWIOAuthBundle/views/ 

и редактировать файлы. Например. мой layout.html.twig выглядит следующим образом

{% set dialogTitle = 'register.connect' | trans([], 'dialogs')%} 
{% extends '::base.html.twig' %} 
{% block title %}{% trans%}app.title{% endtrans %}{% endblock %} 
{% block content %} 
    <div class="row"> 
    <div class="col-sm-12"> 
     <div class="dialog login"> 
     <div class="dialog-header">{{dialogTitle}}</div> 
     <div class="dialog-body"> 
      {% block hwi_oauth_content %} 
      {% endblock hwi_oauth_content %} 
     </div> 
     </div> 
    </div> 
    </div> 
{% endblock %} 

Нет PROB добавить кнопку «продолжить» или все, что нужно