通过Ruby Sinatra应用程序使用Oauth访问Google日历

时间:2016-12-13 04:42:11

标签: ruby oauth-2.0 sinatra google-calendar-api slack-api

我正在使用后端Sinatra应用程序构建Slack机器人。机器人的功能是添加和读取Google日历中的条目。

我正在使用会话和环境变量。

我无法打开Oauth的授权网页并访问用户的日历数据。请帮忙!

这是我的代码:

  #The redirect_url entered in Google Console. 
  #Google Oauth redirects to this endpoint once user has authorised request.
  get '/oauthcallback' do
      client = Signet::OAuth2::Client.new({

      client_id: ENV['CALENDAR_CLIENT_ID'],
      client_secret: ENV['CALENDAR_CLIENT_SECRET'],
      authorization_uri: 'https://accounts.google.com/o/oauth2/auth',
      redirect_uri: "https://agile-stream-68169.herokuapp.com/oauthcallback",
      code: params[:code]

  })

    response = client.fetch_access_token!
    session[:access_token] = response['access_token']
    redirect url_for(:action => :calendars)

  end

  #The Authorization url which checks if credentials are valid.
  get '/authorize' do
    # NOTE: Assumes the user is already authenticated to the app
    user_id = request.session['user_id']
    credentials = authorizer.get_credentials(user_id, request)
    if credentials.nil?
      redirect authorizer.get_authorization_url(login_hint: user_id, request: request)
    end
  end

  #METHOD: Initialising the API by creating a Calendar Service
  def intialize_api
     $service = Google::Apis::CalendarV3::CalendarService.new
     $service.client_options.application_name = ENV['CALENDAR_APPLICATION_NAME']
     $service.authorization = auth_calendar
  end

  def auth_calendar   
     client = Signet::OAuth2::Client.new({
     client_id: ENV['CALENDAR_CLIENT_ID'],
     client_secret: ENV['CALENDAR_CLIENT_SECRET'],
     authorization_uri: 'https://accounts.google.com/o/oauth2/auth',
     scope: Google::Apis::CalendarV3::AUTH_CALENDAR_READONLY,
     redirect_uri: "https://agile-stream-68169.herokuapp.com/oauthcallback"
  })

     redirect client.authorization_uri.to_s
  end

0 个答案:

没有答案