gpt4 book ai didi

ios - FOSOAuthServerBundle - 手动生成访问 token

转载 作者:可可西里 更新时间:2023-11-01 05:55:23 27 4
gpt4 key购买 nike

我有一个 symfony2 网站 和一个通过 oauth 使用 FOSOAuthServerBundle 保护的网络服务,可通过 iOS 应用访问。在网站上,我使用 FOSUserBundleFOSFFacebookBundle

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

所以基本上我想将用户 facebookID 和 facebook_access_token 发送到我的网络服务,检查用户是否正确( token 匹配我的应用程序)并返回身份验证 token

问题:是否有一种简单的方法可以将“Facebook”grant_type 添加到 FOSOAuthServerBundle 中?

我知道有些人看到这些问题已经这样做了:

但他们没有解释如何使用,他们似乎没有使用 FOSOauthServerBundle,而且问题已经很老了。

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

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

如果有人已经完成我们可以提供任何指导,我们将不胜感激。

谢谢

最佳答案

为此,您必须添加一个 Grant Extensions,请参阅官方文档“添加 Grant Extensions”:https://github.com/FriendsOfSymfony/FOSOAuthServerBundle/blob/master/Resources/doc/adding_grant_extensions.md

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

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 :

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' }

关于ios - FOSOAuthServerBundle - 手动生成访问 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18120632/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com