12/08/2018, 16:06
Authenticate với Github trong Ruby on rails
Ngoài việc đăng ký bằng email và pasword, user có thể đăng ký bằng cách authenticate với Facebook, Google... Bài viết này sẽ giới thiệu về cách authenticate với github trong rails application. Setup Github Vào trang https://github.com/settings/developers Click vào Register a new ...
Ngoài việc đăng ký bằng email và pasword, user có thể đăng ký bằng cách authenticate với Facebook, Google... Bài viết này sẽ giới thiệu về cách authenticate với github trong rails application.
Setup Github
- Vào trang https://github.com/settings/developers
- Click vào Register a new application và điền các thông tin Sau khi tạo sẽ lấy được Client ID và Client Secret
Trong Rails Project
Thêm vào gemfile rồi bundle install
gem 'omniauth-github'
Tạo file omniauth.rb trong thư mục config/initializers và thêm code vào
Rails.application.config.middleware.use OmniAuth::Builder do provider :github, ENV['CLIENT_ID'], ENV['CLIENT_SECRET'] end
Trong file routes
Rails.application.routes.draw do root to: "sessions#new" get "/auth/:provider/callback" => "sessions#create" end
Trong sessions_controller.rb sẽ có 2 action:
- action new: trong view có nút authenticate với git (root: http://127.0.0.1:3000/ không dùng http://localhost:3000/)
- action create: khi click link authenticate sẽ lấy lấy thông từ git: email , uid, provider, name... lưu vào database
app/controllers/sessions_controller.rb
class SessionsController < ApplicationController def new end def create user = User.from_omniauth(request.env["omniauth.auth"]) redirect_to root_url end end
app/models/user.rb
class User < ActiveRecord::Base def self.from_omniauth(auth) where(provider: auth.provider, uid: auth.uid).first_or_initialize.tap do |user| user.email = auth.info.email user.uid = auth.uid user.provider = auth.provider user.username = auth.info.name user.save! end end end
Đây là màn hình khi click authenticate