這裏難倒時,「用戶名無法找到」錯誤。使用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
}
}
你設法解決這個問題?我也有類似的問題,但它結束了與我的自定義類後衛沒有返回一個有效的用戶'getUser'功能的問題。 – Jayd
這正是這個問題。 getUser正在返回一個無效的對象。感謝您的迴應 - 應該更新此主題。 –
我可能也使它成爲一個正式的答案,然後讓人們可以更容易地找到它,如果他們也通過它絆倒。 – Jayd