- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 symfony 应用程序,它提供 RESTful API(用于移动应用程序)并具有后端管理。
我可以通过facebook成功登录后端,但是我应该如何允许通过RESTful API登录?
最佳答案
哇..近 12 小时后(!)对于任何也在寻找的人来说,这是解决方案:
GoDisco/UserBundle/Security/Firewall/ApiFacebookListener.php
<?php
/**
* Authored by AlmogBaku
* almog.baku@gmail.com
* http://www.almogbaku.com/
*
* 9/6/13 2:17 PM
*/
namespace Godisco\UserBundle\Security\Firewall;
use FOS\FacebookBundle\Security\Authentication\Token\FacebookUserToken;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface;
use Symfony\Component\Security\Core\Exception\AuthenticationException;
use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Component\Security\Http\Firewall\ListenerInterface;
use Symfony\Component\HttpFoundation\Session\Session;
/**
* API gateway through Facebook oAuth token: Firewall
*
* Class ApiFacebookListener
* @package Godisco\UserBundle\Security\Firewall
*/
class ApiFacebookListener implements ListenerInterface
{
/**
* @var \Symfony\Component\Security\Core\SecurityContextInterface
*/
protected $securityContext;
/**
* @var \Symfony\Component\Security\Core\Authentication\AuthenticationManagerInterface
*/
protected $authenticationManager;
/**
* @var Session
*/
protected $session;
/**
* @var string
*/
protected $providerKey;
public function __construct(SecurityContextInterface $securityContext, AuthenticationManagerInterface $authenticationManager, Session $session, $providerKey)
{
if (empty($providerKey)) {
throw new \InvalidArgumentException('$providerKey must not be empty.');
}
$this->securityContext = $securityContext;
$this->authenticationManager = $authenticationManager;
$this->session = $session;
$this->providerKey=$providerKey;
}
/**
* @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event The event.
*/
public function handle(GetResponseEvent $event)
{
$accessToken = $event->getRequest()->get('access_token');
$token = new FacebookUserToken($this->providerKey, '', array(), $accessToken);
/**
* force always sending token
*/
$_COOKIE=array();
$this->session->clear();
try {
if($accessToken)
$returnValue = $this->authenticationManager->authenticate($token);
$this->securityContext->setToken($returnValue);
}
} catch(AuthenticationException $exception) {
if(!empty($accessToken))
$event->setResponse(new Response(array("error"=>$exception->getMessage()),401));
}
}
}
GoDisco/UserBundle/DependencyInjection/Security/Factory/ApiFacebookFactory.php
<?php
/**
* Authored by AlmogBaku
* almog.baku@gmail.com
* http://www.almogbaku.com/
*
* 9/6/13 2:31 PM
*/
namespace GoDisco\UserBundle\DependencyInjection\Security\Factory;
use FOS\FacebookBundle\DependencyInjection\Security\Factory\FacebookFactory;
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\DefinitionDecorator;
/**
* API gateway through Facebook oAuth token: Factory
*
* Class ApiFacebookFactory
* @package GoDisco\UserBundle\DependencyInjection\Security\Factory
*/
class ApiFacebookFactory extends FacebookFactory
{
/**
* {@inheritdoc}
*/
public function getKey()
{
return 'api_facebook';
}
/**
* {@inheritdoc}
*/
public function addConfiguration(NodeDefinition $node)
{
$builder = $node->children();
$builder
->scalarNode('provider')->end()
->booleanNode('remember_me')->defaultFalse()->end()
;
foreach ($this->options as $name => $default) {
if (is_bool($default)) {
$builder->booleanNode($name)->defaultValue($default);
} else {
$builder->scalarNode($name)->defaultValue($default);
}
}
}
/**
* {@inheritdoc}
*/
protected function createEntryPoint($container, $id, $config, $defaultEntryPointId)
{
return null;
}
/**
* {@inheritdoc}
*/
protected function createListener($container, $id, $config, $userProvider)
{
$listenerId = "api_facebook.security.authentication.listener";
$listener = new DefinitionDecorator($listenerId);
$listener->replaceArgument(3, $id);
$listenerId .= '.'.$id;
$container->setDefinition($listenerId, $listener);
return $listenerId;
}
}
GoDisco/UserBundle/Resources/config/services.yml
services:
api_facebook.security.authentication.listener:
class: GoDisco\UserBundle\Security\Firewall\ApiFacebookListener
arguments: ['@security.context', '@security.authentication.manager', '@session', '']
app/config/security.yml
security:
api:
pattern: ^/api
api_facebook:
provider: godisco_facebook_provider
stateless: true
anonymous: true
main:
...
关于交响乐团 | FOSRestBundle 与 FOSFacebookBundle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18645342/
我有一个 symfony 应用程序,它提供 RESTful API(用于移动应用程序)并具有后端管理。 我可以通过facebook成功登录后端,但是我应该如何允许通过RESTful API登录? 最佳
配置使用: doctrine: dbal: driver: "%database_driver%" .... orm: auto_generate_proxy_classes:
当我关注this documentation时在我的应用程序中“集成 IvoryCKEditorBundle 以创建所见即所得编辑器”时,出现以下错误: [Symfony\Component\Debu
我正在尝试自定义 sfGuardUser 模块的形式。安装 sfGuardDoctrinePlugin 后,我遵循 Symfony 的级联配置约定并创建了以下结构: apps/backend/modu
我需要实现分页。貌似 Doctrine 不支持某些关节。 这是我的查询: $query = $this->getEntityManager() ->createQueryB
在 Symfony2 中,重写 RoutingExtension 非常简单,我可以注入(inject)一些额外的参数。 我正在使用动态域路由到应用程序的不同部分。 {subdomain}.domain
我正在阅读 Symfony 文档(Practical Symfony),并且我使用 propel 完成了 SQL 代码的创建。 但是当我尝试 $ symfony propel:insert-sql M
我正在使用 symfony 3 中的 Gard 在身份验证系统中工作, 当我使用时 $request->getSession()->set(Security::AUTHENTICATION_ERROR
我正在使用 symfony 3 中的 Gard 在身份验证系统中工作, 当我使用时 $request->getSession()->set(Security::AUTHENTICATION_ERROR
我有一个组件,它已经愉快地构建和渲染菜单一段时间了。现在我必须提供一个特殊的情况,它共享所有相同的逻辑,但需要在现有的基础上做一些工作。我想做的是创建一个新的组件操作,该操作将进行必要的预处理,转入共
我有 jquery 发送 AJAX 请求,执行一些检查,然后应该重定向到另一个页面或返回数据。一切工作正常,除了我无法在我的操作文件中强制重定向。我试过: $this->redirect('@new_
我正在创建一个库存系统。我想使用 ResultSetMapping 显示库存中商品的余额。我按照http://doctrine-orm.readthedocs.io/en/latest/referen
我正在尝试使用 bundle HWIOAuthBundle 将我的 Symfony 5 应用程序连接到 Azuse 从 Microsoft 网站重定向后,我收到以下消息:“发生身份验证异常。” 我的
我正在向 Symfony 应用程序添加一个 API,该应用程序应充当 REST Web 服务。但还有一些 Unresolved 问题。 机器人的不同 URI? 我经常阅读“建议”使用像 /api/:i
我的 Symfony 代码有点卡住了。 让我解释一下, 我的数据库中有一个待办事项列表表,其中包含: ID 名为:id 名为:todo 的名称字段 还有其他 3 个无关紧要的字段:“completed
我有一个自定义验证器,我可以在其中获取实体中定义的字段之一的值,然后我想使用内置验证器(例如 NotBlank())验证该字段,以便在验证后我如果字段经过验证,则获取“true”;如果未验证,则获取“
我以前从未使用过 Javascript,但现在我在我的 Symfony 项目 (Symfony 1.4) 中需要它,并且对于在哪里添加代码以使其正常工作存在一些问题: 我在“aktionLimit”模
我是一名优秀的程序员,十分优秀!