damianociarla/opauth-fosub-bundle

DCSOpauthFOSUBBundle 是一个 Symfony2 扩展包,它将 DCSOpauthBundle 与 FOSUserBundle 集成,允许用户使用第三方认证登录/注册到您的网站

v1.0.7 2014-11-14 12:34 UTC

This package is not auto-updated.

Last update: 2024-09-14 16:03:14 UTC


README

DCSOpauthFOSUBBundle 是一个 Symfony2 扩展包,它将 DCSOpauthBundleFOSUserBundle 集成,允许用户使用第三方认证登录/注册到您的网站。

此扩展包使用与 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 和提供者名称关联起来。