sergic/api-authentication-bundle

此包最新版本(dev-master)无可用许可证信息。

Symfony2 api认证包

安装: 33

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

dev-master / 0.1.x-dev 2013-10-28 14:10 UTC

This package is not auto-updated.

Last update: 2024-09-24 01:05:43 UTC


README

Symfony2的API认证包

安装

1. 将此包添加到你的composer.json文件中

{
    "require": {
        "sergic/api-authentication-bundle": "0.1.*@dev"
    }
}

现在运行以下命令让composer下载此包

$ php composer.phar update sergic/api-authentication-bundle

2. 将此包添加到应用内核中

// application/ApplicationKernel.php
public function registerBundles()
{
    return array(
      // ...
        new INB\Bundle\ApiAuthenticationBundle\INBApiAuthenticationBundle(),
      // ...
    );
}

第3步:创建你的用户类

包含token参数

// src/Acme/AcmeBundle/Entity/User.php
/**
 * User Api token
 *
 * @var string
 */
protected $token;

public function __construct()
{
    $this->token = null;
}

/**
 * {@inheritdoc}
 */
public function getToken()
{
    return $this->token;
}

/**
 * {@inheritdoc}
 */
public function setToken($token)
{
    $this->token = $token;

    return $this;
}

/**
 * {@inheritdoc}
 */
public function generateApiToken()
{
    $this->token = md5(md5(time() + rand(11111, 99999)));

    return $this;
}

第4步:创建你的用户仓库类并将其初始化为服务

// src/Acme/AcmeBundle/Repositroy/UserRepository.php
use Ft\Bundle\CoreBundle\Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
    /**
     * Constructor.
     *
     * @param EncoderFactoryInterface $encoderFactory
     * @param EntityManager $em    The EntityManager to use.
     * @param ClassMetadata $class The class descriptor.
     */
    public function __construct($em, ClassMetadata $class, EncoderFactoryInterface $encoderFactory = null)
    {
        parent::__construct($em, $class);
        $this->encoderFactory = $encoderFactory;
    }
}
# src/Acme/AcmeBundle/Resources/config/services.yml
parameters:
    acme.user.class: Acme\AcmeBundle\Entity\User
    acme.repository.user.class: Acme\AcmeBundle\Repositroy\UserRepository
services:
    user_metadata:
        class: Doctrine\ORM\Mapping\ClassMetadata
        factory-method: getClassMetadata
        arguments: [%acme.user.class%]
    acme.repository.user:
        class: %acme.repository.user.class%
        arguments: [@doctrine.orm.entity_manager, @user_metadata, @security.encoder_factory]

第4步:配置应用的安全.yml文件

# app/config/security.yml
security:
    providers:
        api_provider:
            id: inb_api_auth.provider
    firewalls:
        api:
            provider: api_provider
            pattern: ^(/[^\/]+)/api|^/api
            access_denied_url: ^(/[^\/]+)/api|^/api/unauthorized
            api: { lifetime: '30D' }
            stateless: true
            anonymous: true
    encoders:
        Acme\AcmeBundle\Entity\User: sha512
    access_control:
        - { path: ^(/[^\/]+)/api/*|^/api/*, roles: [ROLE_USER] }