具有外部登录链接的RedisSessionStateProvider.cs

时间:2014-09-29 14:02:20

标签: redis owin

我正在开发一个ASP.NET MVC应用程序(targetFramework 4.5),该应用程序使用户可以使用自定义身份验证以及使用他们的Twitter帐户登录该站点。已引用以下库

  1. Microsoft.Owin
  2. Microsoft.Owin.Host.Security
  3. Microsoft.Owin.Security
  4. Microsoft.Owin.Security.Cookies
  5. Microsoft.Owin.Security.MicrosoftAccount
  6. Microsoft.Owin.Security.OAuth和
  7. Microsoft.Owin.Security.Twitter
  8. 当我点击我的网页上的推特按钮时,它会进入推特网站,获取我的凭据并返回我的网站。这里没有问题。

    我现在正在使用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。

1 个答案:

答案 0 :(得分:1)

我有同样的问题。我认为RedisSessionStateProvider实现中存在一个错误。现在,我有一个临时解决方案:

á

因此,在调用外部登录之前,你应该向Session写一些东西。