Sitecore 7.2 社交连接模块 2.1 authResult=error

Sitecore 7.2 Social Connected Module 2.1 authResult=error

我已经在 Sitecore 7.2 上安装了社交连接模块 2.1,然后配置了配置文件映射、facebook 应用程序,一切顺利。

当我尝试使用 "Login with 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 密钥?

谢谢

是的,Sitecore Social Connected 中使用的 Facebook API 已过时。 Facebook scope permissions list was changed. I faced with similar issue 添加 Facebook 应用程序时。我认为 "Login with facebook" 渲染也会向 Facebook 发送带有过时用户权限列表的请求。

我遇到过类似的模块问题,这是由用于社交 API 请求的过时 SSL 版本引起的。 Sitecore 支持提供了解决此问题的修复程序。

此问题的解决方案如下:

  1. 使用任何 .net 反射器,打开 Sitecore.Socail.Facebook.Dll,从源代码创建一个项目。
  2. 通过添加所需的引用来修复项目中的错误。
  3. 转到 FacebookProvider.cs
  4. 中的函数 GetAccountBasicData
  5. 删除函数内的代码,并添加以下代码。

    字符串项; Assert.IsNotNull(账户,"Account parameter is 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;