2016-07-28 3 views
5

ここをクリック。 HWIOAuthBundleを使用してSymfony3のFOSUserBundleとのソーシャルログインを許可する。FOSUserBundleでHWIOAuthBundleを使用しているときに "ユーザー名を見つけることができませんでした"というエラーが発生しました

ユーザー名とパスワードの機能でログインするのはうまくいきますが、ソーシャルログイン(私の場合は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 \エンティティ\ユーザーを延長しなければならないと思います。

関連する問題