2016-05-16 7 views
1

Я установил социальный подключенный модуль 2.1 на Sitecore 7.2, затем настроил сопоставление профиля, приложение facebook, все прошло хорошо.Sitecore 7.2 Social Connected Module 2.1 authResult = ошибка

При попытке войти в систему с помощью визуализации «Войти с Facebook», я получаю перенаправлять на той же странице со строкой запроса об ошибке:

http://sc72rev151021.com/registration?authResult=error_9ffsede-dsdf6-4f50-9b6a-asdasdasd

Я проверил файл журнала, и я вижу эта ошибка:

28144 10:24:36 ERROR The error in ConnectManager occured Exception: Sitecore.Social.Infrastructure.Exceptions.SocialException Message: The given key was not present in the dictionary.

Nested Exception

Exception: System.Collections.Generic.KeyNotFoundException Message: The given key was not present in the dictionary. Source: mscorlib
at System.Collections.Generic.Dictionary`2.get_Item(TKey key) at Sitecore.Social.Facebook.Networks.Providers.FacebookProvider.GetAccountBasicData(Account account) at Sitecore.Social.Client.Api.ConnectorClientManager.Connect(Account account, Boolean attachAccountToLoggedInUser, Boolean isAsyncProfileUpdate) at Sitecore.Social.Client.Api.Connector.ConnectorAuthCompleted.AuthCompleted(AuthCompletedArgs args)

Тогда я перекомпиляции библиотеки DLL, а код врезаться здесь (следующий фрагмент кода из Sitecore.Social.Facebook.dll):

public AccountBasicData GetAccountBasicData(Account account) 
    { 
     Assert.IsNotNull(account, "Account parameter is null"); 
     IDictionary<string, object> accountData = this.GetAccountData(account, "/me"); 
     if (accountData == null) 
     { 
      return null; 
     } 
     string str = string.Concat(accountData["first_name"], " ", accountData["last_name"]); 
     AccountBasicData accountBasicDatum = new AccountBasicData() 
     { 
      Account = account, 
      Id = accountData["id"] as string, 
      Email = accountData["email"] as string, 
      FullName = str 
     }; 
     return accountBasicDatum; 
    } 

    private IDictionary<string, object> GetAccountData(Account account, string access) 
    { 
     return this.FacebookRequest(account, access, null, (FacebookClient facebookClient, string feedPath, object inputParams) => facebookClient.Get(feedPath) as IDictionary<string, object>); 
    } 

Любая идея? Этот модуль зависит от устаревших ключей facebook?

Спасибо

+0

могли бы вы предоставить URL на Facebook страницу, на которой вы будете перенаправлены только после попытки войти в систему? Я предполагаю, что он переносит устаревший объем разрешений. – Anton

+0

Спасибо Антон за помощь, первое, что пользователь на этой странице http://sc72rev151021.com/registration, затем он пытается войти в систему с помощью рендеринга facebook, затем он перенаправится на ту же страницу http://sc72rev151021.com/ Регистрация? authResult = error_9ffsede-dsdf6-4f50-9b6a-asdasdasd –

+0

должен быть один промежуточный запрос в Facebook между двумя страницами, которые вы упомянули. Используйте Fiddler или сетевую панель инструментов разработчика в своем браузере, чтобы получить ее. – Anton

ответ

0

Решение этой проблемы заключается в следующем:

  1. Используйте любой .net отражатель, открытый Sitecore.Socail.Facebook.Dll, создать проект из исходного кода.
  2. Исправить ошибки в проекте, добавив требуемые ссылки.
  3. Перейти к этой функции GetAccountBasicData в FacebookProvider.cs
  4. Удалите код внутри функции и вместо этого добавьте следующий код.

    string item; Assert.IsNotNull (учетная запись, «Учетная запись имеет значение null»);

    IDictionary<string, object> accountData = this.GetAccountData(account, "/me"); 
        if (accountData == null) 
        { 
         return null; 
        } 
        string str = string.Concat(accountData["name"]); 
        AccountBasicData accountBasicDatum = new AccountBasicData() 
        { 
         Account = account, 
         Id = accountData["id"] as string 
        }; 
        AccountBasicData accountBasicDatum1 = accountBasicDatum; 
        if (accountData.ContainsKey("email")) 
        { 
         item = accountData["email"] as string; 
        } 
        else 
        { 
         item = null; 
        } 
        accountBasicDatum1.Email = item; 
        accountBasicDatum.FullName = str; 
        return accountBasicDatum; 
    
1

Да, Facebook API, который используется в Sitecore социальных Connected устарела. Список Facebook scope permissions был изменен. Я столкнулся с similar issue, добавляя приложение Facebook. Я думаю, что рендеринг «Войти с facebook» также отправляет запрос в Facebook с устаревшим списком разрешений пользователя.

+1

Я сделал обратную инженерию. Я получил IL-код (используя ILDASM), обновленные разрешения для новых. Сделайте из IL-кода (используя ILASM) новую dll, и она работает для меня. – Anton

+0

Вот что я думаю, я проверю ваше сообщение. Спасибо большое ! –

0

У меня была аналогичная проблема с модулем, и это было вызвано устаревшей версией SSL, используемой для запросов социального API. Поддержка Sitecore обеспечила решение, которое разрешило это.