2011-04-18 66 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登录页面,仅用于弹出窗口。窗口大小调整可能是由此导致的。