我正在开发一个ASP.NET MVC应用程序(targetFramework 4.5),该应用程序使用户可以使用自定义身份验证以及使用他们的Twitter帐户登录该站点。已引用以下库
当我点击我的网页上的推特按钮时,它会进入推特网站,获取我的凭据并返回我的网站。这里没有问题。
我现在正在使用Redis集成RedisSessionStateProvider.cs来管理会话。我添加了提供程序文件(RedisSessionStateProvider.cs),并更新了web.config文件,如下所示:
<sessionState cookieless="false" customProvider="RedisSessionStateProvider" mode="Custom" timeout="20">
<providers>
<add name="RedisSessionStateProvider" port="6379" server="localhost" type="RedisProvider.SessionProvider.CustomServiceProvider" writeexceptionstoeventlog="true" />
</providers>
</sessionState>
Redis服务器正在运行并正在侦听端口6379.现在,如果我单击Twitter按钮,该站点将我带到twitter身份验证页面,并在成功通过twitter进行身份验证后,回调方法
public async Task ExternalLoginCallback(string returnUrl)
被触发,代码
等待AuthenticationManager.GetExternalLoginInfoAsync();
返回null。
如果我从配置文件中注释掉sessionstate节点,一切正常,即GetExternalLoginInfoAsync()正确返回loginInfo。
我无法确定此问题的根本原因。有人可以指导我解决这个问题吗?
谢谢, 与Hemant。
答案 0 :(得分:1)
我有同样的问题。我认为RedisSessionStateProvider实现中存在一个错误。现在,我有一个临时解决方案:
á
因此,在调用外部登录之前,你应该向Session写一些东西。