2012-11-22 50 views
1

我在VS2012中使用Web窗體模板並查看OpenAuth代碼。AspNet OpenAuth通過Web窗體模板登錄後獲取User.Identity.Name

我希望一個成功的外部登錄後,一些外部數據存儲,但在調試期間不能看到如何得到的代碼執行在這些點有效的外部登錄後,在登錄的用戶名保持 -

ProcessProviderResult - 如果(OpenAuth.Login(authResult.Provider,authResult.ProviderUserId,createPersistentCookie:假))

CreateAndLoginUser() - 如果(OpenAuth.Login(的ProviderName,ProviderUserId,createPersistentCookie:假))

後第ese調用沒有User.Identity.Name並且用戶名尚未經過身份驗證,那麼如何獲取membershipusername? 它似乎是在重定向後登錄(我真的不得不在會話中存儲的東西,並重新導入後重新啓動?我認爲我做錯了)。

OpenAuth上有哪些方法?或同等的我需要打電話來獲取用戶名,以便我可以根據需要存儲我的數據。

感謝

回答

1

User.Identity.Name將只能由窗體身份驗證身份驗證提供者填寫的回報(客戶端已經被重定向後,正如你指出)。

但是在auth過程中,在重定向之前的OpenAuth代碼中,用戶名僅由AuthenticationResult.UserName(即:ExternalLoginLandingPage.aspx.cs中的authResult.UserName)表示。

+0

感謝您的幫助@Simon Mourier。我想知道是否可以幫助我看到最好的方法,然後使用它將ExtraData綁定到「結果」(在您澄清重定向之後,這是OAuth中的錯誤)membershipuser?我真的必須使用AuthResult手動查看UsersOpenAuthAccounts表嗎?任何想法爲什麼沒有OpenAuth方法允許查找這個?或者我錯過了一個步驟? – WickedW

+0

不確定在這裏瞭解你的問題。由於在https://github.com/rustd/SocialLoginASPNET/blob/master/IntegrateSocialLogin/ExternalLoginLandingPage.aspx.cs中調用OpenAuth.VerifyAuthentication(redirectUrl),用戶名在ProcessProviderResult處理期間被填充;如果您在重定向之前需要它,那麼您需要修改該ProcessProviderResult方法。 –

+0

我不認爲AuthenticationResult.UserName與membershipusername相同,來自文檔 - 爲用戶應該識別的用戶獲取(不安全,非唯一)別名。備註:此別名可能來自提供商,或者如果提供商不提供,可能由依賴方派生。它不保證是唯一的... 如果我們想要存儲一些額外的數據,它看起來像我們將不得不使用鍵AuthenticationResult.Provider和AuthenticationResult.ProviderUserId,然後以某種方式將它們鏈接回成員身份的用戶名後重新發布,感覺「hacky」.. – WickedW

相關問題