我尝试使用FOSOAuthBundle和FOSUserBundle将我的应用程序连接到Facebook。连接到Facebook时,它工作正常,连接到Facebook后,应用程序将重定向到由FOSUserBundle创建的注册表单,以创建已连接到Facebook的新用户。现在我希望我的应用程序在我的应用程序成功连接到Facebook后,根据facebook用户信息自动创建新用户,例如username = facebook username,email = facebook email等。怎么做?
以下是我的一些代码:
user.php的
namespace Wirata\MainBundle\Entity;
use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="facebook_id", type="string", nullable=true)
*/
private $facebookID;
public function __construct()
{
parent::__construct();
// your own logic
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
public function setfacebookID($facebookID)
{
$this->facebookID = $facebookID;
return $this;
}
}
Security.yml
security:
encoders:
FOS\UserBundle\Model\UserInterface: sha512
...
providers:
fos_userbundle:
id: fos_user.user_provider.username
...
firewalls:
...
secure_area:
pattern: ^/
oauth:
failure_path: /connect
login_path: /connect
check_path: /connect
provider: fos_userbundle
resource_owners:
facebook: "/login/check-facebook"
oauth_user_provider:
service: hwi_oauth.user.provider.fosub_bridge
anonymous: true
logout:
path: /logout
target: /
access_control:
- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/connect, roles: IS_AUTHENTICATED_ANONYMOUSLY }
config.yml
fos_user:
db_driver: orm
firewall_name: secure_area
user_class: Wirata\MainBundle\Entity\User
registration:
confirmation:
enabled: false
hwi_oauth:
firewall_name: secure_area
connect:
confirmation: true
#account_connector: hwi_oauth.user.provider.fosub_bridge
#registration_form_handler: hwi_oauth.registration.form.handler.fosub_bridge
#registration_form: fos_user.registration.form
resource_owners:
facebook:
type: facebook
client_id: 'xxxxxxx'
client_secret: 'xxxxxxxxxxxxxxxx'
scope: "email"
infos_url: 'https://graph.facebook.com/me?fields=username,name,picture.type(square)'
http_client:
verify_peer: false
fosub:
username_iterations: 30
properties:
facebook: facebookID
答案 0 :(得分:0)
您必须编写相当多的代码才能实现您的目标。看看这个包含问题解决方案的Gist,还有一个很好的解释:
https://gist.github.com/danvbe/4476697
修改强>
为了从支持它的OAuth资源所有者那里获取用户的电子邮件,您需要定义要获取的数据范围。例如,对于Facebook,它将是:
hwi_oauth:
resource_owners:
facebook:
scope: "email"
您需要在资源所有者的文档下查看您可以在范围内请求的数据类型。对于Facebook,请参阅此页面:https://developers.facebook.com/docs/facebook-login/permissions#categories