首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >HWIOAuthBundle,如何使用Facebook访问令牌手动验证用户?

HWIOAuthBundle,如何使用Facebook访问令牌手动验证用户?
EN

Stack Overflow用户
提问于 2015-04-27 14:16:12
回答 2查看 2.8K关注 0票数 8

我有一个网站(Symfony2),HWIOauthBundle用来连接Facebook,一切都很好。

现在,我正在尝试用Cordova和Ionic框架(AngularJS)构建一个AngularJS应用程序,我想用Facebook验证我的用户:

  1. 使用$cordovaFacebook,我对我的用户进行身份验证,并获得一个有效的Facebook访问令牌,没关系
  2. 我尝试使用此访问令牌在服务器端使用HWIOauthBundle对用户进行身份验证: 获取TOKEN
  3. Symfony拒绝了我对此日志的请求: 信息匹配路由"facebook_login“(参数:"_route":"facebook_login")信息-身份验证请求失败: OAuth错误:”无效的验证代码格式“。

因此,我的问题是:如何使用Facebook连接在前端和后端验证我的用户?

谢谢:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-12 17:40:33

我还想知道如何用HWIOAuthBundle实现服务器端登录。我没有在网络上找到任何解决方案,所以我根据我在网上读到的提示编写了功能。基本上,你必须:

  1. 在应用程序上验证用户身份
  2. 使用Facebook令牌向服务器发出http请求。
  3. 在服务器端,检查令牌是否用于您的Facebook应用程序,并检索用户的Facebook ID。
  4. 根据获取的ID从DB获取用户。

这是我的Symfony控制器:

代码语言:javascript
复制
public function getSecurityFbAction($token)
{
    // Get the token's FB app info.
    @$tokenAppResp = file_get_contents('https://graph.facebook.com/app/?access_token='.$token);
    if (!$tokenAppResp) {
        throw new AccessDeniedHttpException('Bad credentials.');
    }

    // Make sure it's the correct app.
    $tokenApp = json_decode($tokenAppResp, true);
    if (!$tokenApp || !isset($tokenApp['id']) || $tokenApp['id'] != $this->container->getParameter('oauth.facebook.id')) {
        throw new AccessDeniedHttpException('Bad credentials.');
    }

    // Get the token's FB user info.
    @$tokenUserResp = file_get_contents('https://graph.facebook.com/me/?access_token='.$token);
    if (!$tokenUserResp) {
        throw new AccessDeniedHttpException('Bad credentials.');
    }

    // Try to fetch user by it's token ID, create it otherwise.
    $tokenUser = json_decode($tokenUserResp, true);
    if (!$tokenUser || !isset($tokenUser['id'])) {
        throw new AccessDeniedHttpException('Bad credentials.');
    }
    $userManager = $this->get('fos_user.user_manager');
    $user = $userManager->findUserBy(array('facebookId' => $tokenUser['id']));

    if (!$user) {
        // Create user and store its facebookID.
    }

    // Return the user's JSON web token for future app<->server communications.
}

我抛出Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException异常来处理应用程序上的登录错误。

当然,您确实应该使用http,因为您将交换合理的信息。

我不知道这是否是最好的方法,但效果很好。希望能帮上忙!

票数 3
EN

Stack Overflow用户

发布于 2015-07-28 20:18:40

我觉得Symfony并没有拒绝你的请求。脸谱网是。我不确定这是否有帮助,但我知道在处理Facebook Auth时可能会出现一些问题:

  • 您知道工具是否与代码参数一起发送一个redirect_uri参数吗?如果是的话:
  • 您是否检查过您的redirect_uri在末尾有一个尾随斜线?See this
  • 愚蠢的问题,但你有没有检查你的app_id是相同的,当你获得授权通过科多瓦?
  • 检查您的redirect_uri没有任何查询参数。
  • 检查您在整个过程中使用的redirect_uri是否始终相同。

总的来说,您的问题似乎几乎一直与redirect_uri URI格式有关。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29898255

复制
相关文章

相似问题

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