damianociarla / opauth-fosub-bundle
DCSOpauthFOSUBBundle 是一个 Symfony2 扩展包,它将 DCSOpauthBundle 与 FOSUserBundle 集成,允许用户使用第三方认证登录/注册到您的网站
Requires
- php: >=5.3
- damianociarla/opauth-bundle: ~1.0
- symfony/symfony: ~2.3
This package is not auto-updated.
Last update: 2024-09-14 16:03:14 UTC
README
DCSOpauthFOSUBBundle 是一个 Symfony2 扩展包,它将 DCSOpauthBundle 与 FOSUserBundle 集成,允许用户使用第三方认证登录/注册到您的网站。
此扩展包使用与 FOS 用户表相关的实体来存储由认证服务检索的用户数据。
此扩展包不会修改 FOSUserBundle 的登录/注册,但允许用户与应用程序启用的提供者同步。
先决条件
要使用 DCSOpauthFOSUBBundle,您需要下载、安装和配置 DCSOpauthBundle 和 FOSUserBundle。
有关特定文档,请参阅各个扩展包的文档
安装
a) 下载并安装 DCSOpauthFOSUBBundle
要安装 DCSOpauthBundle,请运行以下命令
bash $ php composer.phar require damianociarla/opauth-fosub-bundle
b) 启用扩展包
要启用它,请将扩展包实例添加到内核
<?php
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new DCS\OpauthFOSUBBundle\DCSOpauthFOSUBBundle(),
);
}
c) 创建您的 Oauth 类
在这个第一个版本中,DCSOpauthFOSUBBundle 只支持 Doctrine ORM。您必须提供一个具体的 Oauth 类。您必须扩展扩展包提供的抽象实体并创建适当的映射。
注解
src/Acme/OpauthFOSUBBundle/Entity/Oauth.php
<?php
namespace Acme\OpauthFOSUBBundle\Entity;
use DCS\OpauthFOSUBBundle\Entity\Oauth as BaseOauth;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="fos_user_oauth")
*/
class Oauth extends BaseOauth
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable="false")
*/
protected $user;
public function __construct()
{
parent::__construct();
// your own logic
}
}
xml
如果您使用 xml 配置 Doctrine,您必须添加两个文件。实体和 orm.xml
src/Acme/OpauthFOSUBBundle/Entity/Oauth.php
<?php
namespace Acme\OpauthFOSUBBundle\Entity;
use DCS\OpauthFOSUBBundle\Entity\Oauth as BaseOauth;
class Oauth extends BaseOauth
{
}
src/Acme/OpauthFOSUBBundle/Resources/config/doctrine/Oauth.orm.yml
<?xml version="1.0" encoding="UTF-8"?>
<doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd">
<entity name="Acme\OpauthFOSUBBundle\Entity\Oauth" table="fos_user_oauth">
<id name="id" type="integer" column="id">
<generator strategy="AUTO" />
</id>
<many-to-one field="user" target-entity="Acme\UserBundle\Entity\User">
<join-column name="user_id" referenced-column-name="id" nullable="false" />
</many-to-one>
</entity>
</doctrine-mapping>
d) 配置扩展包
现在您已经正确启用了并配置了 DCSOpauthFOSUBBundle,下一步是配置扩展包以适应您应用程序的具体需求。
将以下配置添加到您的 config.yml 文件中。
# app/config/config.yml
dcs_opauth_fosub:
oauth_model: Acme\OpauthFOSUBBundle\Entity\Oauth
它是如何工作的?
DCSOpauthFOSUBBundle 不会改变 FOSUserBundle 的注册流程,但它添加了使用 DCSOpauth 提供的 connect
路由与外部认证提供者(Facebook、Google、LinkedIn)同步和注册的可能性。
如果用户未认证,在通过 DCSOpauthBundle 认证后,DCSOpauthFOSUBBundle 会检查是否存在具有该 UID 的用户,如果存在,则用户会登录,如果不存在,则会打开 FOSUserBundle 注册表单。FOSUserBundle 注册结束时,会创建一个具有提供者名称和 UID 的记录并将其关联到新用户。
如果用户已认证,在通过 DCSOpauthBundle 认证后,DCSOpauthFOSUBBundle 会将登录用户与 UID 和提供者名称关联起来。