2011-04-18 64 views
0

我正在使用DotNetOpenAuth庫爲Google和Yahoo創建SSO登錄。當用戶點擊我的LinkBut​​ton(我正在使用自定義登錄控件)時,我使用Request.RedirectToProvider()以編程方式重定向到提供程序。Yahoo DotNetAutho SSO登錄:阻止Yahoo創建彈出式窗口

這對所有瀏覽器中的Google和Yahoo都有效。問題在於雅虎似乎認爲它是在彈出窗口中打開的,並調整了整個窗口的大小。

如何在DotNetOpenAuth中設置UI類型以防止此行爲? UIModes似乎只有Popup模式?

編輯:我沒有實際使用過UIRequest擴展。這是我的調試工作的一部分。

請求代碼如下:

Dim OpenIDEndpoint As String = WellKnownProviders.Yahoo.ToString, OpenID As OpenIdRelyingParty = New OpenIdRelyingParty 
    Dim LoginRequest As IAuthenticationRequest = OpenID.CreateRequest(OpenIDEndpoint) 

    Dim Fields As ClaimsRequest = New ClaimsRequest() 

    Fields.Email = DemandLevel.Require 
    Fields.FullName = DemandLevel.Require 
    Fields.Nickname = DemandLevel.Require 
    Fields.BirthDate = DemandLevel.Require 
    Fields.Gender = DemandLevel.Require 

    LoginRequest.AddExtension(Fields) 
    LoginRequest.RedirectToProvider() 

回答

0

的UI擴展是嚴格通過彈出窗口使用。如果您沒有在彈出框中打開提供商的登錄頁面,請不要附加UIRequest擴展名。

我希望這將解決調整大小的問題。

+0

這真的很奇怪,我實際上並沒有使用UIRequest擴展(我只是試圖解決問題發生後的行爲)。我不知道爲什麼雅虎假設它彈出。其他地方我可能會不小心設置這個值? – 2011-04-19 21:21:44

0

覺得這是在回答中呈現更好比評論:

即使StackOverflow上的雅虎登錄頁面有同樣的問題!

在檢查SSO的雅虎登錄鏈接時,我注意到雅虎的SSO登錄頁面似乎已針對彈出式登錄進行了優化。在頁面上,有這個JS:

<script type="text/javascript"> 
var isPopup = "true"; //<-- Note this 
if (window.opener || isPopup) { 
    var Dom = YAHOO.util.Dom; 
    var Event = YAHOO.util.Event; 

    (function() { 
    if (Dom.getViewportWidth() < 500 || Dom.getViewportHeight() < 675) { 
     window.resizeTo(500,675); 
    } 
    })(); 

... 

即使SSO不使用彈出窗口,雅虎似乎將isPopup值設置爲true。我不知道這是雅虎方面的錯誤,還是DotNetOpenAuth中的一些錯誤/錯誤。我會歡迎安德魯對此的看法?

更新

奇怪,SSO吃了我的更新。

http://developer.yahoo.com/oauth/guide/oauth-userauth.html - 雅虎顯然已經優化了他們的SSO登錄頁面,僅用於彈出窗口。窗口大小調整可能是由此導致的。