3

私のレールアプリでは、予定を作成できます。これらの予定は、各ユーザーの Google カレンダーにエクスポートする必要があります。

omn​​iauth-google-oauth2をインストールし、Google の API コンソールから Web アプリケーションのapi keyclient_idclient_secretを取得しました。

omn​​iauthでユーザーを認証し、後で使用するためにaccess_tokenrefresh_token、およびexpires_atの日付をデータベースに保存できます。

イベントを各ユーザーの Google カレンダーにエクスポートするとき (バックグラウンド ジョブで実行) に、無効な資格情報という応答が返されます。

私は何を間違っていますか?

注: oauth で承認した直後にユーザー カレンダーにアクセスできますが、しばらくするとアクセスできなくなります。

コード:

セッションコントローラー

/auth/:provider/callback このメソッドにルーティングします:

auth = request.env["omniauth.auth"]
# Save token of user
current_user.google_auth_token         = auth["credentials"]["token"]
current_user.google_auth_refresh_token = auth["credentials"]["refresh_token"]
current_user.google_auth_expires_at    = Time.at auth["credentials"]["expires_at"]
current_user.save

オムニ認証設定

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, ENV["GOOGLE_CLIENT_ID"], ENV["GOOGLE_CLIENT_SECRET"], {
    access_type: 'offline',
    scope: 'userinfo.email,calendar'
  }
end

アクセス権を取得してユーザーのカレンダーを作成する

client = Google::APIClient.new
client.authorization.refresh_token = app.carer.google_auth_refresh_token
client.authorization.access_token = app.carer.google_auth_token
if client.authorization.refresh_token && client.authorization.expired?
  client.authorization.fetch_access_token!
end
service = client.discovered_api('calendar', 'v3')
result = client.execute(:api_method => service.calendar_list.list)
# results in auth error, Invalid Credentials ...
4

1 に答える 1

2

インストール済みアプリケーションの client_ID と client_secret をGoogle API コンソールから取得する必要があるようです。それだけで問題は解決しました。

于 2013-06-15T18:22:16.587 に答える