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

  1. Vào trang https://github.com/settings/developers
  2. Click vào Register a new application và điền các thông tin Sau khi tạo sẽ lấy được Client IDClient 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:

  1. 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/)
  2. 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

0