برنامه نویسی

ادغام Google OAuth2 با برنامه Devise for a Ruby on Rails

به عنوان یک توسعه‌دهنده Ruby on Rails، اغلب زمانی فرا می‌رسد که از شما خواسته می‌شود مکانیسم‌های احراز هویت را در برنامه خود پیاده‌سازی کنید. Devise یکی از محبوب ترین راه حل های احراز هویت در اکوسیستم Rails است. هنگامی که با Google OAuth2 ترکیب می شود، تجربه ورود بدون زحمتی را برای کاربران فراهم می کند. در این مقاله، می‌خواهم راهنمای گام به گام نحوه راه‌اندازی Google OAuth2 با برنامه Devise on Rails را به شما معرفی کنم، همچنین با استفاده از کنترل استثناها، برنامه شما را قوی و قابل اعتماد می‌کند.

مرحله 1: راه اندازی Google API

سفر ما با ایجاد یک پروژه جدید در Google API Console آغاز می شود. پس از ایجاد پروژه، باید Google+ API (بخشی ضروری از فرآیند احراز هویت Google OAuth2) را فعال کنیم. این را ارسال کنید؛ می توانید شناسه مشتری OAuth را برای برنامه وب خود ایجاد کنید. به یاد داشته باشید URL بازگشت به تماس خود را به عنوان یک URI تغییر مسیر مجاز اضافه کنید. برای توسعه، این معمولا شکل می گیرد http://localhost:3000/users/auth/google_oauth2/callback. Google یک Client ID و Client Secret ارائه می دهد که بعداً در پیکربندی برنامه Rails از آنها استفاده خواهیم کرد.

مرحله 2: پیکربندی برنامه Rails

گام بعدی این است که برنامه Rails خود را با سیستم Google OAuth تطبیق دهید. با اضافه کردن شروع کنید omniauth-google-oauth2 و dotenv-rails جواهرات به Gemfile شما. دومی به مدیریت موثر متغیرهای محیطی شما کمک می کند.

gem 'devise'
gem 'omniauth-google-oauth2'
gem 'dotenv-rails', groups: [:development, :test]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بعد از دویدن bundle install برای نصب این جم ها، a ایجاد کنید .env در ریشه برنامه Rails خود فایل کنید. اینجا جایی است که شناسه مشتری Google و Client Secret را که قبلاً به دست آورده بودیم ذخیره می کنیم.

GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این متغیرهای محیطی برای برنامه Rails شما برای برقراری ارتباط با سرور Google OAuth2 ضروری هستند. برای ادغام آنها، کد زیر را وارد کنید

config/initializers/devise.rb:

config.omniauth :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'], {}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در مرحله بعد، ما باید مطمئن شویم که مدل کاربر ما همه‌جانبه است و می‌تواند داده‌های برگشت تماس را مدیریت کند. برای رسیدن به این هدف، به روز رسانی کنید app/models/user.rb:

class User < ApplicationRecord
  devise :database_authenticatable, :registerable, :omniauthable, omniauth_providers: %i[google_oauth2]

  def self.from_omniauth(access_token)
    data = access_token.info
    user = User.where(email: data['email']).first

    # Uncomment the section below if you want users to be created if they don't exist
    unless user
        user = User.create(
           email: data['email'],
           password: Devise.friendly_token[0,20]
        )
    end
    user
  end
end
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

علاوه بر این، ما باید callback in را مشخص کنیم config/routes.rb:

devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در نهایت، بیایید ایجاد کنیم OmniauthCallbacksControllerکه در app/controllers/users/omniauth_callbacks_controller.rb، که داده های احراز هویت بازگردانده شده توسط سرور Google OAuth2 را مدیریت می کند:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def google_oauth2
      @user = User.from_omniauth(request.env['omniauth.auth'])

      if @user.persisted?
        sign_in_and_redirect @user
      else
        session['devise.google_data'] = request.env['omniauth.auth'].except(:extra) # Removing extra as it can overflow some session stores
        redirect_to new_user_registration_url, alert: @user.errors.full_messages.join("\n")
      end
  end
end
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مرحله 3: رسیدگی به استثنا

آخرین اما نه کم اهمیت، ما نباید اهمیت رسیدگی به استثنا را نادیده بگیریم. برنامه‌های کاربردی قوی باید به خوبی با شکست‌ها برخورد کنند. برای این منظور، یک کنترل کننده استثنای OmniAuth را راه اندازی می کنیم.

که در config/initializers/omniauth.rb:

OmniAuth.config.on_failure = proc do |env|
  "Users::OmniauthCallbacksController".constantize.action(:failure).call(env)
end
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

و سپس روش شکست را به آن اضافه کنید OmniauthCallbacksController:

def failure
  flash[:error] = 'There was an error while trying to authenticate you...'
  redirect_to new_user_session_path
end
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به یاد داشته باشید که سرور Rails خود را هر زمان که تغییراتی در مقداردهی اولیه ایجاد می کنید، مجددا راه اندازی کنید.

و voila! شما به‌تازگی برنامه Rails خود را با Google OAuth2 با استفاده از Devise راه‌اندازی کرده‌اید، و به کاربران خود راهی آسان و امن برای ورود به حساب‌های Google خود ارائه می‌دهید. کد نویسی مبارک!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا