2014-09-29 56 views
1

我正在開發一個ASP.NET MVC應用程序(targetFramework 4.5),它提供用戶使用自定義身份驗證以及使用他們的Twitter帳戶登錄到網站。以下庫已引用RedisSessionStateProvider.cs與外部登錄鏈接

  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

當我點擊我的網頁上的twitter按鈕,它會到twitter站點,獲取我的憑據並返回到我的網站。這裏沒有問題。

我現在整合了RedisSessionStateProvider.cs來管理使用Redis的會話。我已經添加提供程序文件(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的服務器正在運行,如果我點擊Twitter的按鈕上的端口6379.監聽現在,現場帶我到Twitter的認證頁面,之後,從Twitter的成功認證,當回調方法

公共異步任務ExternalLoginCallback(字符串RETURNURL)

被觸發,該代碼

await AuthenticationManager.GetExternalLoginInfoAsync();

返回null。

如果我從配置文件中註銷sessionstate節點,一切工作正常,即GetExternalLoginInfoAsync()正確返回loginInfo。

我無法確定此問題的根本原因。任何人都可以請指導我解決這個問題?

謝謝, Hemant。

回答

1

我有同樣的問題。我認爲RedisSessionStateProvider實現中存在一個錯誤。現在,我有一個臨時決議:

[AllowAnonymous] 
public ActionResult Login(string returnUrl) 
{    
    // TODO: RedisSessionState provider will not works if remove it. 
    Session["hook-init-redis"] = DateTime.Now.ToString(); 

    ViewBag.ReturnUrl = returnUrl; 
    return View(); 
} 

所以,你應該寫一些東西到Session,在外部登錄被調用之前。