2016-07-28 5 views
5

Пресечено здесь. Использование HWIOAuthBundle для обеспечения социального входа в систему с помощью FOSUserBundle на Symfony3.Ошибка «Имя пользователя не найдена» при использовании HWIOAuthBundle с FOSUserBundle

Войти с использованием имени пользователя и пароля в порядке, но при аутентификации с помощью социальных подключений (в моем случае Facebook и LinkedIn) ошибка «Имя пользователя не может быть найдено» возвращается при перенаправлении на страницу входа в систему.

Любые идеи?

Соответствующие части соответствующих файлов:

config.yml

fos_user: 
    db_driver: orm 
    firewall_name: main 
    user_class: AppBundle\Entity\User 

hwi_oauth: 
    firewall_names: [secured_area] 
    connect: 
     account_connector: hwi_oauth.user.provider.fosub_bridge 
     confirmation: true 
    resource_owners: 
     facebook: 
      type:    facebook 
      client_id:   xxx 
      client_secret:  xxx 
     linkedin: 
      type:    linkedin 
      client_id:   xxx 
      client_secret:  xxx 
    fosub: 
     username_iterations: 30 
     properties: 
      facebook: facebookId 
      linkedin: linkedinId 

security.yml

security: 
    encoders: 
     FOS\UserBundle\Model\UserInterface: bcrypt 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: ROLE_ADMIN 

    providers: 
     fos_userbundle: 
      id: fos_user.user_provider.username 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt|error)|css|images|js)/ 
      security: false 

     secured_area: 
      anonymous: ~ 
      form_login: 
       provider: fos_userbundle 
       csrf_token_generator: security.csrf.token_manager 
      oauth: 
       resource_owners: 
        facebook: "/login/check-facebook" 
        linkedin: "/login/check-linkedin" 
       login_path:  /login 
       use_forward: false 
       failure_path: /login 
       check_path:  /login 
       oauth_user_provider: 
        service: hwi_oauth.user.provider.fosub_bridge 

      logout: 
       path: /logout 


     main: 
      pattern: ^/ 
      logout:  true 
      anonymous: true 


    access_control: 
     - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/connect$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/admin/, role: ROLE_ADMIN } 

routing.yml

fos_user: 
    resource: "@FOSUserBundle/Resources/config/routing/all.xml" 

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

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

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

facebook_login: 
    path: /login/check-facebook 

linkedin_login: 
    path: /login/check-linkedin 

User.php

<?php 
// src/AppBundle/Entity/User.php 

namespace AppBundle\Entity; 

use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(type="string", length=200, name="firstName", nullable=true) 
    */ 
    protected $firstName; 

    /** 
    * @ORM\Column(type="string", length=200, name="lastName", nullable=true) 
    */ 
    protected $lastName; 

    /** 
    * @ORM\Column(name="facebookId", type="string", length=255, nullable=true) 
    */ 
    private $facebookId; 

    /** 
    * @ORM\Column(name="linkedinId", type="string", length=255, nullable=true) 
    */ 
    private $linkedinId; 

    private $facebookAccessToken; 


    public function getFirstName() { 
     return $this->firstName; 
    } 

    public function getLastName() { 
     return $this->lastName; 
    } 

    public function setFirstName($firstName) 
    { 
     $this->firstName = $firstName; 
     return $this; 
    } 

    public function setLastName($setLastName) 
    { 
     $this->lastName = $setLastName; 
     return $this; 
    } 

    /** 
    * @param string $facebookId 
    * @return User 
    */ 
    public function setFacebookId($facebookId) 
    { 
     $this->facebookId = $facebookId; 

     return $this; 
    } 

    /** 
    * @param string $linkedinId 
    * @return User 
    */ 
    public function setLinkedinId($linkedinId) 
    { 
     $this->linkedinId = $linkedinId; 

     return $this; 
    } 


    /** 
    * @return string 
    */ 
    public function getFacebookId() 
    { 
     return $this->facebookId; 
    } 

    /** 
    * @return string 
    */ 
    public function getLinkedinId() 
    { 
     return $this->linkedinId; 
    } 

    /** 
    * @param string $facebookAccessToken 
    * @return User 
    */ 
    public function setFacebookAccessToken($facebookAccessToken) 
    { 
     $this->facebookAccessToken = $facebookAccessToken; 

     return $this; 
    } 

    /** 
    * @return string 
    */ 
    public function getFacebookAccessToken() 
    { 
     return $this->facebookAccessToken; 
    } 

    public function __construct() 
    { 
     parent::__construct(); 
     // your own logic 
    } 
} 
+1

Удалось ли вам преодолеть эту проблему? У меня была аналогичная проблема, но она оказалась проблемой с функцией getUser в моем пользовательском классе защиты, не возвращающем действительного пользователя. – Jayd

+0

В этом и проблема. getUser возвращал недопустимый объект. Спасибо за удар - должен был обновить эту тему. –

+0

Я также могу сделать это официальным ответом, чтобы люди могли легко найти его, если они тоже наткнулись на него. – Jayd

ответ

1

У меня была аналогичная проблема, но в конечном итоге это была проблема с функцией getUser в моем пользовательском классе защиты, не возвращающем действительного пользователя.

Так что для тех, кто ищет этот вопрос, убедитесь, что ваш getUser возвращает действительный объект пользователя, который наследуется от соответствующего класса пользователей безопасности Symfony или реализует соответствующий UserInterface.

Например. Symfony\Component\Security\Core\User\UserInterface

0

Я думаю, вы должны расширить FOS \ UserBundle \ Entity \ User вместо ФОС \ UserBundle \ Model \ User.

 Смежные вопросы

  • Нет связанных вопросов^_^