簡體   English   中英

Symfony3 Facebook登錄 - redirect_uri URL轉換為相對

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM