3

Google の API を使用して、レール Web アプリケーションにユーザーをサインアップおよびログインさせようとしています。私は認証をいじっていましたが、認証コードを取得した後、このエラーで立ち往生しています。

これが私がやろうとしていることです:

path = Rails.root.to_s + PATH_TO_JSON_FILENAME_FROM_GOOGLE_API

client_secrets = Google::APIClient::ClientSecrets.load(path)

auth_client = client_secrets.to_authorization

auth_client.update!(
  :scope => 'https://www.googleapis.com/auth/drive.metadata.readonly',
  :redirect_uri => REDIRECT_URI

)

auth_client.code = ACCESS_CODE_RETURNED_BY_GOOGLE_WHEN_USER_LOGS_IN

auth_client.fetch_access_token!

いくつかの質問:

  1. 私が本当に取得できるようにしたいのは、ユーザー名とその電子メール アドレスだけです。適切な値がどうある:scopeべきかについては不明です。
  2. redirect_uriGoogle API コンソールにあるリダイレクト URI の 1 つに設定しています。の線に沿った何かhttp://localhost:3000/auth/callback。それにもかかわらず、次の json 応答を取得しています。

    {「エラー」:「redirect_uri_mismatch」}

ここで私が間違っているかもしれないことについての考えはありますか?

4

2 に答える 2

2

最後にこれを理解しました。redirect_uriを に設定する必要がありましたpostmessage。これは、最初に認証コードを要求した方法だからです。これが私の完全な解決策です:

Google 認証ライブラリに次のものをロードします。

function start() {
  gapi.load('auth2', function() {
    auth2 = gapi.auth2.init({
      client_id: 'MY_CLIENT_ID',
    });
  });
};

クリックすると次の関数が呼び出される HTML ボタンを作成しました。

function(e){
    e.preventDefault();    
    auth2.grantOfflineAccess({'redirect_uri': 'postmessage'}).then(this.signInCallback);
},

現在、signInCallback関数は認証コードをログに記録しているだけなので、私が書いている Ruby サーバー コードをテストできます。

function(authResult) {
    console.log(authResult.code);
}

私のルビーファイルは次のようになります。

client = Google::APIClient.new
client.authorization.client_id = MY_CLIENT_ID
client.authorization.client_secret = MY_CLIENT_SECRET
client.authorization.redirect_uri = "postmessage"
client.authorization.code = CODE_THAT_WAS_LOGGED_TO_CONSOLE
client.authorization.fetch_access_token!

もう少し情報: 'postmessage' 呼び出しを使用する必要がありますgrantOfflineAccess。開発者コンソールから実際のリダイレクト URI の 1 つを入力しようとしましたが、それは気に入りませんでした (詳細については、このSO の質問を参照してください)。私が理解したのは、これを行う場合、認証コードをアクセストークンと交換しようとするときに、サーバー側で同じことを行う必要があるということです.

于 2015-08-09T20:59:04.377 に答える
0

リダイレクト URI の不一致エラーは、リダイレクト URI が登録されているものと同じでないことを明確に意味します。URI が同一であることをさらに確認してください。

于 2015-08-08T05:00:18.450 に答える