Facebook OAuth + AppHarbor обходной путь на случайном порте - PullRequest
3 голосов
/ 13 января 2012

У меня есть пример приложения, размещенного на AppHarbor, и теперь я хочу интегрировать авторизацию через Facebook.Поэтому я скачал самородок из пакета Facebook.Web.Mvc для его реализации.

После прочтения учебника у контроллера есть метод:

 public ActionResult Login(string returnUrl)
    {
        var oauthClient = new FacebookOAuthClient(FacebookApplication.Current) { RedirectUri = GetFacebookRedirectUri() };


        if (!string.IsNullOrWhiteSpace(returnUrl))
        {
            returnUrl = Url.Action("Index", "Facebook");
        }

        dynamic parameters = new ExpandoObject();
        parameters.scope = ExtendedPermissions;

        var state = new { csrf_token = CalculateMD5Hash(Guid.NewGuid().ToString()), return_url = returnUrl };
        parameters.state = Base64UrlEncode(Encoding.UTF8.GetBytes(JsonSerializer.Current.SerializeObject(state)));
        SetFacebookCsrfToken(state.csrf_token);

        string s = oauthClient.GetLoginUrl(parameters).AbsoluteUri;

        ViewBag.FacebookLoginUrl = s;
        //new LogEvent(s).Raise();

        return View(new AccountModel());
    }

Просмотр:

<a href="@ViewBag.FacebookLoginUrl" id="lUrl">
<div class="fblogin"></div>

В localhost это работает для меня.Но когда я загружаю его в appharbor, я вижу, что сгенерированная ссылка указывает на адрес + порт 16013 (так как поддержка всегда говорила случайный порт).Таким образом, щелкнув по нему, вы увидите окно входа в Facebook, а затем пустую страницу.

Я вручную настроил настройки своего приложения в Facebook для этого порта, но это не помогло.

Также я попытался получить доступ к своему сайту через этот порт - ничего.

Затем яизменил номер порта через jquery на 80, тоже не помогло.

у вас были такие проблемы?

Ответы [ 2 ]

4 голосов
/ 19 января 2012

Я не знаком с API Facebook, но у меня была похожая проблема.Я подозреваю, что передаваемое значение returnUrl неверно.Возможно, он содержит номер порта, который AppHarbor использует для внутреннего распределения нагрузки.

См. Эту статью о том, как создать общедоступный URL-адрес для AppHarbor: http://support.appharbor.com/kb/getting-started/workaround-for-generating-absolute-urls-without-port-number

Затем убедитесь, что значение вreturnUrl общедоступен.

2 голосов
/ 19 июня 2013

Теперь вы можете установить aspnet:UseHostHeaderForRequestUrl appSetting на true, что эффективно решает эту проблему.Это можно сделать, добавив переменную конфигурации в ваше приложение с соответствующим ключом и значением.

Источник в AppHarbor

...