2011-10-26 12 views
2

私はdevise/omniauthを設定しました。今はFacebookのjavascript SDKを使用してログイン/許可を求め、omniauthコールバックコントローラにルーティングします。Facebookからの認証コードの取得方法javascript SDK

これは私が持っているものです(coffeescript)。

$('#fb-connect').live 'click', -> 
    FB.login ((response) -> 
    if response.authResponse 
     window.location = "https://stackoverflow.com/users/auth/facebook/callback?code=" + response.authResponse.signedRequest 
    else 
     console.log "User cancelled login or did not fully authorize." 
), scope: "email, offline_access" 

    false 

しかし、私はInvalid verification code formatエラーが発生しています。コードparamが署名付きリクエスト以外の何かを期待しているからです。

更新

だから私は認可コードに渡す必要があるように見えますが、私はどのように見つけることができません。 direct url exampleは、response_type = codeを指定して認証コードを取得できることを示していますが、FB.apiを使用してresponse_type = codeを実行する方法はわかりません。何か案は?

http://www.facebook.com/dialog/oauth/? 
    scope=email,user_birthday& 
    client_id=123050457758183& 
    redirect_uri=http://www.example.com/response& 
    response_type=code 

答えて

2

上のドキュメントをチェックします

より小さいバージョンを使用している場合、またはparamとコードの両方が欠落している場合にスローされる例外を回避するには、次のインラインjがonclickで動作します。

<script> 
    function fb_authorise(){ 
    FB.login(function(response) { 
     if(response.authResponse) { 
     window.location = "https://stackoverflow.com/users/auth/facebook/callback?signed_request=<%= params[:signed_request]%>" 
     } 
    }, {scope: "email, offline_access"}); 
    }; 
</script> 

だからあなたはsigned_requestのPARAMを使用して、コード=ないsigned_request

+1

これをURLに追加されたあなたの元の質問への答えに私はomniauth 0.3.2のための唯一の真実であると、後(で考えます私が0.3.0にあった時) – CodeWombat

0

クライアント側の認証では、「コード」を使用する必要はありません。そのresponse.authResponseにはすでにaccess_tokenが含まれています。 FB.login()はすでにこれをすべて行っています。 "window.location = ..."がある場合、ユーザーはログインしています。

authenticationの文書をチェックしてください - クライアント側のセクションを読んでいることを確認してください。また、あなたが考案/ omniauth ...以下の作品完璧

$('#fb-connect').live 'click', -> 
    FB.login ((response) -> 
    if response.authResponse 
     window.location = "https://stackoverflow.com/users/auth/facebook/callback 
    else 
     console.log "User cancelled login or did not fully authorize." 
), scope: "email, offline_access" 

    false 

EDITを使用しているとき、あなたのコントローラに任意のパラメータを渡す必要はありませんただ、この質問全体で誰つまずく包みfb.login

関連する問題