Mở đầu
Ngày này,hầu hết các website đều cho phép người dùng có thể đăng nhập thông qua tài khoản mạng xã hội như facebook,google,github.....
Chức năng này khá hữu ích và tiện lợi với người dùng.
Trong bài hôm nay,mình sẽ giới thiệu mọi người cách tạo chức năng đăng nhập google trong ứng dụng Ruby on Rails sử dụng gem devise và gem omniauth-google-oauth2
Cài đặt gem devise
Tại gemfile thêm:
gem 'devise
Run bundle install
Tiếp theo run: rails generate devise:install
Tại config/environments/development.rb
.Thêm dòng sau:
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
Tiếp tục run: rails generate devise User
Và cuối cùng run : rails db:migrate
Cấu hình view devise
rails generate devise:views users
Cấu hình controller :
rails generate devise:controllers
Cài đặt gem omniauth-google-oauth2
Bước 1: Cài đặt gem
Tại Gemfile thêm:
gem 'omniauth-google-oauth2'
Run bundle install
Bước 2: Config devise.rb
Trong config/initializers/devise.rb
.Thêm:
config.omniauth :google_oauth2, ENV["GOOGLE_OAUTH_CLIENT_ID"], ENV["GOOGLE_OAUTH_CLIENT_SECRET"]
Trong đó
ENV["GOOGLE_OAUTH_CLIENT_ID"], ENV["GOOGLE_OAUTH_CLIENT_SECRET"]
Thì các bạn phải cài đặt gem figaro để đặt các biến môi trường tại config/application.yml
Mình sẽ hướng dẫn mọi người các lấy được giá trị của 2 biến này:
Đầu tiên,các bạn vào link sau:
https://console.developers.google.com
Và chọn create project
Chọn project mới vừa được tạo và chọn Oauth consent screen.Điền các thông tin cần thiết theo yêu cầu.
Tiếp theo, chọn Credentials => CREATE CREDENTISLS => Oauth client ID
Tiếp theo tại "application type" chọn Web application.
Tạo xong sẽ hiện form với :
Your Client ID là giá trị của ENV["GOOGLE_OAUTH_CLIENT_ID"]
Your Client Secret là giá trị của ENV["GOOGLE_OAUTH_CLIENT_SECRET"]
Bước 3: Thêm trường uid và provider vào bảng User
Run :
rails generate migration AddOmniauthToUsers
Và run : rails db:migrate
Bước 4. Cấu hình routes như sau:
Bước 5.Cấu hình Controller
Tại app/controllers/users/omniauth_callbacks_controller.rb:
Bước 6. Cấu hình Model
Bước 7. Cấu hình view
Tại app/view/users/sessions/new.html.erb . Thêm
<%= link_to "Sign in with Google", user_google_oauth2_omniauth_authorize_path %>
Lời Kết
Trong bài này,mình đã giới thiệu với mọi người về cách tạo chức năng đăng nhập google trong ứng dụng Ruby on Rails.
Cảm ơn mọi người đã đọc !
Tài liệu tham khảo
https://github.com/heartcombo/devise
https://github.com/zquestz/omniauth-google-oauth2
https://medium.com/@adamlangsner/google-oauth-rails-5-using-devise-and-omniauth-1b7fa5f72c8e