首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FOSOAuthServerBundle -手动生成访问令牌

FOSOAuthServerBundle -手动生成访问令牌
EN

Stack Overflow用户
提问于 2013-08-08 07:47:21
回答 1查看 3K关注 0票数 4

我有一个symfony2网站和一个通过oauth保护的web服务,使用FOSOAuthServerBundle通过iOS应用程序访问。在网站上,我使用了FOSFacebookBundle.和FOSUserBundle

我唯一错过的就是让用户有机会在iOS应用程序上登录facebook,并为我的access_token返回一个链接到他的用户帐户的access_token,这样他就可以像其他用户一样访问我的api了。

因此,基本上我希望将用户facebookID和facebook_access_token发送到我的send服务,检查用户是否正确(令牌与我的应用程序匹配),返回身份验证令牌

问题:有没有一种简单的方法在FOSOAuthServerBundle中添加一个"Facebook“grant_type?

我知道有些人看到这些问题就这么做了:

但他们没有解释如何,他们似乎没有使用FOSOauthServerBundle和问题是相当古老的。

我试过使用这个包:https://github.com/TheFootballSocialClub/FSCOAuth2FacebookGrantBundle

但是这个包在我之前只下载了9次,并不完全适合我的应用程序(例如,它认为Facebook用户的用户名等于他的facebookId )。所以我想我要做的是用我自己的方式重新实现同样的事情。

如果有人已经做了,我们可以提供任何指导,这将是非常感谢。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-11 15:46:23

为此,您必须添加一个格兰特扩展,请参阅正式文档“添加格兰特扩展”:extensions.md

您可以找到我的FacebookGrantExtension从FB access_token获取令牌:

代码语言:javascript
复制
class FacebookGrantExtension implements GrantExtensionInterface
{
protected $userManager = null;
protected $facebookSdk = null;

public function __construct(UserManager $userManager, \BaseFacebook $facebookSdk)
{
    $this->userManager = $userManager;
    $this->facebookSdk = $facebookSdk;
}

/**
 * @see OAuth2\IOAuth2GrantExtension::checkGrantExtension
 */
public function checkGrantExtension(IOAuth2Client $client, array $inputData, array $authHeaders)
{
    if (!isset($inputData['facebook_access_token'])) {
        return false;
    }

    $this->facebookSdk->setAccessToken($inputData['facebook_access_token']);
    try {
        // Try to get the user with the facebook token from Open Graph
        $fbData = $this->facebookSdk->api('/me');

        if (empty($fbData) || !isset($fbData['id'])) {
            return false;
        }

        // Check if a user match in database with the facebook id
        $user = $this->userManager->findUserBy(array(
            'facebookId' => $fbData['id']
        ));

        // If no user found, register a new user and grant token
        if (null === $user) {
            return false;
        } 
        // Else, return the access_token for the user            
        else {
            return array(
                'data' => $user
            );
        }
    } catch(\FacebookApiExceptionion $e) {
        return false;
    }
}
}

config.yml:

代码语言:javascript
复制
my.oauth.facebook_extension:
    class: My\CoreBundle\Oauth\FacebookGrantExtension
    arguments:
        userManager: "@fos_user.user_manager"
        facebookSdk: "@fos_facebook.api"
    tags:
        - { name: fos_oauth_server.grant_extension, uri: 'http://grants.api.mywebsite.com/facebook_access_token' }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18120632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档