9

私はこれに対する答えをオンラインで見つけることができませんでした.Google+サインインボタンを使用することを除けば、この時点では使用したくありません。した方が良い。

OmniAuth を接続した Ruby on Rails アプリケーション (ruby v1.9.3、rails v3.2.13) があり、google_oauth2 gem を使用して Google+ と統合しています。

私の単純な目標は、ユーザーが Google+ で認証し、Google API プロジェクトへのアクセスを許可し、google-api-client gem を使用して Google+ ユーザーのボールトに瞬間を投稿できるようにすることです。

Google API プロジェクトをセットアップし、Web アプリケーション用の OAuth 2.0 を作成し、Google+ API サービスを有効にしました。

私は次のプロバイダーで OmniAuth をセットアップしており、request_visible_actions オプションを追加して投稿できるようにしました (これは正しいと思いますが、オンラインで見たコード例からこれが使用されているのを見たことがありません...):

provider :google_oauth2, CLIENT_ID, CLIENT_SECRET, {
    access_type: 'offline',
    scope: 'userinfo.email,userinfo.profile,plus.me,https://www.googleapis.com/auth/plus.login',
    request_visible_actions: 'http://schemas.google.com/AddActivity',
    redirect_uri: 'http://localhost/auth/google_oauth2/callback'
}

ユーザーを /auth/google_oauth2 にリダイレクトすると、アプリを承認するためにユーザーが Google+ に送信され、ユーザーが承認すると、request.env["omniauth.auth"] にアクセスできるコールバックに戻ります。トークン、電子メールアドレスなど、私が期待するすべての情報。auth["credentials"]["token"] から access_token を保存しています。

ここまでは順調ですよね?

次のコードを使用してモーメントを投稿しようとすると、401 無許可エラーを示す例外が発生します。

client = Google::APIClient.new

client.authorization.access_token = self.access_token

plus = client.discovered_api('plus', 'v1')

moment = {
    :type => 'http://schemas.google.com/AddActivity',
    :target => { :id => Time.now.to_i.to_s,
               :description => message,
               :name => message
    }
}

# post a moment/activity to the vault/profile
req_opts = { :api_method => plus.moments.insert,
             :parameters => { :collection => 'vault', :userId => 'me', },
             :body_object => moment
}

response = client.execute!(req_opts).body

私も交換してみました

client.authorization.access_token = self.access_token

credentials = Hash.new
credentials[:access_token] = self.access_token
credentials[:refresh_token] = self.refresh_token
credentials[:expires_at] = self.expires_at
client.authorization.update_token!(credentials)

しかし、運がありません。

問題は次のいずれかに関係していると思います。

  1. OmniAuth が request_visible_actions を Google に正しく発行していない
  2. Google::APIClient オブジェクトにトークンを正しく設定していません

次のリソースを使用してここまで到達しましたが、公式には立ち往生しています。

どんなアイデアでも大歓迎です!

4

3 に答える 3

0

API コンソールで、Web アプリケーションまたはインストール済みアプリケーションとして登録しましたか? あなたの場合、ユーザーがオンラインでない場合にトークンが有効になるように、インストールされているアプリケーションを選択する必要があると思います。

于 2013-06-22T16:52:42.360 に答える
0

https://www.googleapis.com/auth/plus.loginを plus.login だけに変更してみてください。同じ設定で私のために働いています。

于 2013-06-26T08:33:05.967 に答える