2016-07-28 52 views
5

Stated hier. Verwenden Sie HWIOAuthBundle, um eine soziale Anmeldung mit FOSUserBundle auf Symfony3 zu ermöglichen."Benutzername konnte nicht gefunden werden" Fehler bei der Verwendung von HWIOAuthBundle mit FOSUserBundle

Einloggen mit Benutzernamen und Passwort funktioniert gut, aber bei der Authentifizierung mit sozialen Logins (in meinem Fall Facebook und LinkedIn), Fehler "Benutzername konnte nicht gefunden werden" wird auf einer Weiterleitung auf der Anmeldeseite zurückgegeben.

Irgendwelche Ideen?

relevante Teile der relevanten Dateien:

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

Haben Sie es geschafft, dieses Problem zu lösen? Ich hatte ein ähnliches Problem, aber es endete damit, dass die Funktion "getUser" in meiner benutzerdefinierten Schutzklasse keinen gültigen Benutzer zurückgab. – Jayd

+0

Das war genau das Problem auch hier. getUser hat ein ungültiges Objekt zurückgegeben. Danke für die Beule - sollte diesen Thread aktualisiert haben. –

+0

Ich kann es auch als offizielle Antwort machen, damit die Leute es leichter finden, wenn sie auch darüber stolpern. – Jayd

Antwort

1

Ich hatte ein ähnliches Problem, aber es endete ein Problem mit der GetUser-Funktion in meiner benutzerdefinierten Schutzklasse, die keinen gültigen Benutzer zurückgibt.

Wenn Sie diese Frage haben, überprüfen Sie, ob Ihr getUser ein gültiges Benutzerobjekt zurückgibt, das von der entsprechenden Symfony-Sicherheitsbenutzerklasse erbt oder das entsprechende UserInterface implementiert.

Eg. Symfony\Component\Security\Core\User\UserInterface

0

Ich glaube, Sie FOS \ UserBundle \ Entity \ Benutzer anstelle von FOS \ UserBundle \ Modell \ User zu verlängern haben.