2013-09-05 2 views
2

우리는 oauth를 통해 정사각형 계정을 사용하여 Vizify에 로그인하려고 시도하는 사용자 중 일부와 씨름하고 있습니다. 사용자의 Foursquare 계정이 Facebook 계정에 연결되어 있고 facebook에 로그인되어있는 경우 oauth 프로세스는 404 오류로 연결됩니다. 페이스 북에 로그인하지 않았거나 계정이 연결되어 있지 않으면 프로세스가 예상대로 작동합니다. https://www.facebook.com/connect/ping?client_id=CLIENT_ID&domain=foursquare.com&origin=1&redirect_uri=https%3A%2F%2Fs-static.ak.facebook.com%2Fconnect%2Fxd_arbiter.php%3Fversion%3D27%23cb%3Df373b9bef%26domain%3Dfoursquare.com%26origin%3Dhttps%253A%252F%252Ffoursquare.com%252Ff3ba6cde18%26relation%3Dparent&response_type=token%2Csigned_request%2Ccode&sdk=joeyFoursquare 버그 : 계정이 Facebook에 연결되어 있으면 oauth 로그인으로 인해 404 오류가 발생합니다.

:로 재 https://foursquare.com/facebook-login?continue=/oauth2/authenticate?client_id=OUR_CLIENT_ID&response_type=code&redirect_uri=OUR_REDIRECT_URL

3) 브라우저 : https://foursquare.com/oauth2/authenticate?client_id=OUR_ID&response_type=code&redirect_uri=OUR_REDIRECT_URI

2) 브라우저로 재 : 우리는 OAuth는 URL을 명중

1) 다음과 같이

프로세스는

4) 브라우저가 다음으로 리디렉션됩니다.

4 단계에서 response_type 및 redirect_uri 매개 변수가 누락되었습니다.이 요청은 404 응답으로 연결됩니다.

다른 앱에서도 문제를 재현 할 수 있습니다. 예를 들어 나는뿐만 아니라 foodspotting으로 확인 :

  • 로그인
  • 가입 페이스 북에

    • 지우기 캐시와 쿠키, 당신의 foodspotting 계정 설정에서
    • 을 foodspotting.com 포 스퀘어 응용 프로그램을 연결하는 클릭
    • 빵 - 404

    캐시의 청산은/쿠키가 필요합니다 여기 정사각형 버그 때 t을 발생하기 때문에 안녕하세요, 페이스 북을 통해 자동으로 로그인하려고합니다. 바로 첫 번째 시도를하기 전에 두 번째로 자동 로그인을 시도하지 못하도록 쿠키 "disableFacebookAutoLogin"을 설정합니다. 이 쿠키는 로그 아웃 한 후에도 계속 표시됩니다.

  • 답변

    2

    foursquare.com/oauth2/authenticate에서 un-minified javascript를 보면 버그를 추적했습니다. 문제의 코드는 다음과 같은 기능에서 온다 :

    fourSq.auth.Autologin = { 
        maybeFacebookAutologin: function() { 
        window.fourSq.config.enableFacebookAutologin && (!$.cookie("disableFacebookAutologin") && !fourSq.api.models.companion.user.UserUtil.isLoggedIn()) && fourSq.facebook.getFacebookApi(function (a) { 
         a.getLoginStatus(function (b) { 
         if (b === fourSq.facebook.FacebookApi.State.CONNECTED) { 
          var c = (b = location.href.match(/[\?&]continue=([^&]+)/) || location.href.match(/https?:\/\/[^\/]+(.+)/)) ? b[1] : "/"; 
          a.loginWithPermissions(void 0, function() { 
          var a = fourSq.stats.Action.build(fourSq.stats.action.Action.AUTOLOGIN); 
          fourSq.stats.logActionWithDelay(a, function() { 
           $.cookie("disableFacebookAutologin", "1", { 
            expires: 1, 
            path: "/" 
           }); 
           fourSq.util.redirect("/facebook-login?continue\x3d" + c) 
          }) 
          }) 
         } 
         }) 
        }) 
        } 
    }; 
    

    문제 라인은 c를 탈출하지 않습니다

    fourSq.util.redirect("/facebook-login?continue\x3d" + c)입니다.

    이이 (박람회의 이익을 위해 단순화 된 URL) 같은 상황에 이르게 :

    http://foursquare.com/facebook-login?continue=/cool/beans?foo=bar&baz=bam.

    문제점을 확인 하시겠습니까? 계속 URL의 모든 검색어 매개 변수 (첫 번째 제외)는/facebook-login에 대한 검색어 매개 변수로 대신 해석됩니다!

    올바른 코드가 있어야한다 : 올바른 출력을 생성합니다

    fourSq.util.redirect("/facebook-login?continue\x3d" + encodeURIComponent(c)) 
    

    :

    http://foursquare.com/facebook-login?continue=%2Fcool%2Fbeans%3Ffoo%3Dbar%26baz%3Dbam

    +0

    흠이 버그처럼 않습니다. 우리는 끝까지 살펴볼 것입니다. – octopi

    +0

    기록을 위해 foursquare는이 버그에 대한 수정 사항을 적용했습니다. 대단한 빠른 처리 시간들, 고마워! –