2016-07-28 51 views
5

这里难倒时,“用户名无法找到”错误。使用HWIOAuthBundle允许在Symfony3上使用FOSUserBundle进行社交登录。使用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 \型号\用户FOS \ UserBundle \实体\用户。

相关问题