[英]The redirect_uri URL must be absolute Facebook login PHP SDK
[英]Symfony3 Facebook Login - redirect_uri URL gets converted to relative
我正在嘗試為網絡應用程序實現facebook登錄。 這是FacebookConnect.php
<?php
namespace Vendor\GiftBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Symfony\Component\Routing\Generator\UrlGenerator;
class FacebookConnectController extends Controller
{
/**
* @Route("/connect/facebook", name="connect_facebook")
*/
public function connectFacebookAction(Request $request)
{
// redirect to Facebook
$redir = $this->generateUrl('connect_facebook_check', array(), UrlGeneratorInterface::ABSOLUTE_URL);
$facebookOAuthProvider = $this->get('app.facebook_provider');
$url = $facebookOAuthProvider->getAuthorizationUrl([
// these are actually the default scopes
'scopes' => ['public_profile', 'email'],
'redirect_uri' => [$redir],
]);
return $this->redirect($url);
}
/**
* @Route("/connect/facebook-check", name="connect_facebook_check")
*/
public function connectFacebookActionCheck()
{
// will not be reached!
}
}
當我點擊觸發connectFacebookAction函數的按鈕時,我得到FB錯誤redirect_uri URL必須是絕對的 。 它就像忽略了我在參數中給出的絕對URL。
我究竟做錯了什么?
編輯:授權網址在任何情況下都會發生變化,或者對應用程序保持不變? 我可以直接硬編碼,直到我弄清楚如何解決這個問題?
編輯2 :我弄清楚為什么URL是相對的而不是絕對的。 這是我的服務配置:
services:
app.facebook_provider:
class: League\OAuth2\Client\Provider\Facebook
arguments:
-
clientId: %facebook_app_id%
clientSecret: %facebook_app_secret%
graphApiVersion: v2.8
redirectUri: "@=service('router').generate('connect_facebook_check', {}, true)"
如何從服務中的路由生成絕對URL?
您使用的是聯盟/ oauth2-client的1.x版本(您可以登錄composer.lock)嗎? 這會忽略getAuthorizationUrl中的redirect_uri並使用您在構造函數中傳遞的那個。 如果您使用的是該版本,請將app.facebook_provider的定義更改為read
redirectUri: "@=service('router').generate('connect_facebook_check', {}, 0)"
注意0而不是true。 UrlGeneratorInterface常量在2.8中已更改 。
我認為您的問題是您在服務中缺少請求上下文。 請查看: http : //symfony.com/doc/current/console/request_context.html
您可以將請求傳遞給它,然后執行以下操作:
$context = new RequestContext();
$context->fromRequest($this->requestStack->getCurrentRequest());
$this->router->setContext($context);
$this->router->generate('connect_facebook_check', array(), RouterInterface::ABSOLUTE_URL);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.