[RAILS] TẠO ỨNG DỤNG WEB SỬ DỤNG GOOGLE API

Google API là bộ API toàn diện của Google, cho phép ứng dụng truy cập, thao tác với hầu hết các dịch vụ của Google như Calender, Drive, Gmail, Google+, YouTube… Bài viết này sẽ hướng dẫn các bạn xây dựng 1 ứng dụng web bằng Ruby on Rails, cho phép người dùng đăng nhập qua tài khoản Google và lấy dữ liệu của họ từ 2 dịch vụ phổ biến của Google là Googel+ và Gmail thông qua Google API.

1. Tạo 1 ứng dụng trên Google Developers Console

  • Bạn truy cập vào Google Developers Console và đăng nhập bằng tài khoản Google của bạn.

  • Chọn Create Project.

  • Điền tên project vào khung PROJECT NAME rồi click Create.

  • Sau khi Google tạo xong project sẽ chuyển hướng bạn về Project Dashboard của project đó, bạn chọn Enable an API.

  • Vì trong giới hạn bài viết này sẽ sử dụng Google+ API và Gmail API nên bạn tìm 2 API này trong danh sách và ấn vào OFF để kích hoạt chúng.

  • Tiếp theo bạn chọn Credentials ở mục APIs & auth ở bên phải, sau đó chọn Create new Client ID.

  • Google sẽ yêu cầu bạn cấu hình consent screen, bạn cứ điền những thông tin Google yêu cầu, sau đó ấn Save.

  • Ở cửa sổ Create Client ID, bạn điền những thông tin của ứng dụng bạn muốn tạo như dưới rồi ấn Create Client ID:

(Vì bài viết này chỉ có ý định chạy ứng dụng web trên localhost nên ở AUTHORIZED REDIRECT URI bạn chỉ cần điền domain của URI là http://localhost:3000.)

  • Bạn lưu lại CLIENT IDCLIENT SECRET, chúng ta sẽ dùng chúng để đăng nhập người dùng qua tài khoản Google ở ứng dụng web dưới đây.

2. Tạo 1 ứng dụng web bằng Ruby on Rails

  • Tạo 1 ứng dụng Rails mới bằng lệnh rails new
rails new googleapi
  • Thêm các gem sau vào Gemfile và chạy bundle install
gem 'google-api-client', :require => 'google/api_client'
gem 'omniauth'
gem 'omniauth-google-oauth2'

Chúng ta sẽ dùng gem omniauthomniauth-google-oauth2 để xác thực người dùng và gem google-api-client để thao tác với Google API.

  • Tạo mới file config/initializers/ominauth.rb
Rails.application.config.middleware.use OmniAuth::Builder do
  provider :google_oauth2, CLIENT_ID, CLIENT_SECRET,
  {
    scope: ["plus.login", "plus.me", "userinfo.email", "userinfo.profile", "https://mail.google.com/",
      "gmail.compose", "gmail.modify", "gmail.readonly"],
    access_type: 'offline'
  }
end

Ở đây

  • **CLIENT_ID **, CLIENT_SECRET chính là client id và client secret bạn đã tạo ở bước trên
  • scope là những quyền mà bạn muốn người dùng cấp cho ứng dụng của bạn. (Bạn có thể xem danh sách các quyền mà mỗi API cần ở OAuth 2.0 Playground)
  • access_type: ‘offline’: tùy chỉnh này cho phép ứng dụng bạn truy cập dữ liệu của Google ngay cả khi chủ tài khoản Google đó đang không truy cập Google trên trình duyệt.
  • Cấu hình file config/routes.rb

Omniauth sẽ tự động tạo cho bạn đường dẫn localhost:3000/auth/google_oauth2. Khi người dùng truy cập vào đường dẫn này, Omniauth sẽ chuyển hướng người dùng đến Google để xác thực tài khoản và xin cấp quyền truy cập. Sau khi xác thực thành công, Google chuyển hướng người dùng lại về ứng dụng web của bạn và gửi kèm theo access_token. Do đó bạn cần set callback URL cho ứng dụng của bạn như dưới:

resource :sessions
root to: "sessions#new"
match "/auth/:provider/callback", to: "sessions#create", via: :get
  • Tạo SessionsController ở file app/controllers/sessions_controller.rb
class SessionsController < ApplicationController
  def new
  end

  def create
    auth = request.env['omniauth.auth']
  end
end

Đây chỉ là 1 controller tạm thời, có nhiệm vụ đọc thông tin xác thực mà Google gửi trả lại cho ứng dụng web của bạn. Trong những thông tin đó có access token mà bạn cần dùng để thao tác với dữ liệu của người dùng trên Google thông qua Google API. Tiếp theo đây bài viết sẽ hướng dẫn bạn cách sử dụng Google API.

3. Sử dụng Google API để lấy dữ liệu Google+ và Gmail

  • Đầu tiên bạn cần đọc ra access token mà Google đã cấp cho bạn
token = auth['credentials']['token']
  • Khởi tạo 1 GoogeAPIClient và set access token
client = Google::APIClient.new
client.authorization.access_token = token
  • Lấy dữ liệu từ Google+:

Khởi tạo Google+ API

plus = client.discovered_api('plus')

Vd 1: lấy thông tin tài khoản Google+

result = client.execute(api_method: plus.people.get, parameters: {userId: 'me'}).data

Vd 2: lấy danh sách bạn trên Google+

result = client.execute(api_method: plus.people.list, parameters: {userId: 'me', collection: 'visible'}).data.items
  • Lấy dữ liệu từ Gmail:

Khởi tạo Gmail API

gmail = client.discovered_api('gmail')

Lấy danh sách email trong thư mục Inbox

result = client.execute(api_method: gmail.users.threads.list, parameters: {userId: 'me'}).data.threads

Trong các ví dụ trên plus.people.get, plus.people.list, gmail.users.threads.list là API method bạn cần gọi để lấy những thông tin tương ứng. Bạn có thể xem thêm về các API method của các API khác ở APIs Explorer. Ngoài ra, người viết cũng đã tạo 1 ứng dụng web demo cách sử dụng Google API, các bạn cũng có thể tham khảo thêm tại:

Cảm ơn các bạn đã theo dõi bài viết này.

Tài liệu tham khảo