我在Sitecore 7.2上安装了社交连接模块2.1,然后我配置了配置文件映射,facebook app,一切进展顺利。
当我尝试使用"使用Facebook登录"渲染,我正在使用错误查询字符串重定向到同一页面:
http://sc72rev151021.com/registration?authResult=error_9ffsede-dsdf6-4f50-9b6a-asdasdasd
我检查了日志文件,我看到了这个错误:
28144 10:24:36错误ConnectManager中的错误发生异常: Sitecore.Social.Infrastructure.Exceptions.SocialException消息: 给定的密钥不在字典中。
嵌套异常
异常:System.Collections.Generic.KeyNotFoundException消息: 给定的密钥不在字典中。资料来源:mscorlib
在System.Collections.Generic.Dictionary`2.get_Item(TKey key)at Sitecore.Social.Facebook.Networks.Providers.FacebookProvider.GetAccountBasicData(账户 帐户) Sitecore.Social.Client.Api.ConnectorClientManager.Connect(账户 account,Boolean attachAccountToLoggedInUser,Boolean isAsyncProfileUpdate)at Sitecore.Social.Client.Api.Connector.ConnectorAuthCompleted.AuthCompleted(AuthCompletedArgs 参数)
然后我重新编译了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 :(得分:1)
是的,Sitecore Social Connected中使用的Facebook API已过时。 Facebook scope permissions列表已更改。在添加Facebook应用程序时我遇到了similar issue。我认为&#34;登录facebook&#34;渲染还向Facebook发送具有过期用户权限列表的请求。
答案 1 :(得分:0)
我遇到了与模块类似的问题,它是由用于社交API请求的过时SSL版本引起的。 Sitecore支持提供了解决此问题的修复程序。
答案 2 :(得分:0)
此问题的解决方案如下:
删除函数内的代码,并添加以下代码。
字符串项; Assert.IsNotNull(帐户,“帐户参数为空”);
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;