[RUBY] SNS-Authentifizierung mit Rails Google

Tor

Klicken Sie auf den Link zur Google-Authentifizierung image.png

Wählen Sie ein Konto image.png

** Erfolgreiche Zertifizierung !! ** image.png

Eine Basis erstellen

--Einführung von Geräten --Erstellen Sie eine Buchungsfunktion mit Gerüst ezgif.com-video-to-gif (1).gif

Ich habe eine Anwendung erstellt, mit der ich mich anmelden und Beiträge erstellen kann.

Richten Sie Google ein

image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png Wenn es sich bei der URL um eine Entwicklungsumgebung handelt, geben Sie diese ein http://localhost:3000/users/auth/google_oauth2/callback Wenn Sie es in einer Produktionsumgebung verwenden möchten, geben Sie es bitte hier ein http: // Produktionsumgebungs-URL / users / auth / google_oauth2 / callback

Ich werde den Code bearbeiten

Umgebungsvariablen festlegen.

devise.rb


# ==> OmniAuth
# Add a new OmniAuth provider. Check the wiki for more information on setting
# up on your models and hooks.
# config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo'
config.omniauth :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET']

Ich habe "dotenv-Rails" verwendet, um Umgebungsvariablen zu verwalten.

gemfile


gem 'dotenv-rails'

Bundle installieren. Erstellen Sie .env direkt unter dem Stammverzeichnis der Anwendung

Kopieren Sie die folgende "Client-ID", "Client-Geheimnis"

image.png

Fügen Sie es wie folgt in ".env" ein

.env


GOOGLE_CLIENT_ID='Geben Sie die Kunden-ID ein'
GOOGLE_CLIENT_SECRET='Kundengeheimnis'

Für Umgebungsvariablen halte ich es für eine gute Idee, .env zu .ignore hinzuzufügen, wenn Sie auf github drücken.

.ignore


#Fügen Sie Folgendes hinzu
.env

Gemfile bearbeiten

gemfile


gem 'omniauth-google-oauth2'

Fügen Sie den obigen Edelstein hinzu

bundle install

Routing-Bearbeitung

gemfile


Rails.application.routes.draw do
  #Beachten Sie, dass beim Bearbeiten des Devise Controllers die Änderungen nur übernommen werden, wenn Folgendes beschrieben wird.
  devise_for :users, controllers: {
    #Wenn Sie die Gerätehierarchie bearbeiten, bearbeiten Sie den Pfad entsprechend.
    omniauth_callbacks: "users/omniauth_callbacks"
  }

  resources :posts

  root 'posts#index'
end

Fügen Sie der Datenbank Spalten hinzu

Erstellen Sie die für die Authentifizierung erforderlichen Spalten, die Spalte "Anbieter" und die Migrationsdatei, um die Spalte "UID" zu erstellen.

$ rails g migration AddOuthColumnToUsers provider:string uid:string

rails db:migrate

Benutzermodell bearbeiten

Ich werde den Prozess in user.rb schreiben

user.rb



class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         #Fügen Sie Folgendes hinzu
         #Bei der Authentifizierung außer Google%i[twitter, facebook]Und so weiter
         :omniauthable, omniauth_providers: %i[google_oauth2]

  #Erstellen Sie eine Klassenmethode
  def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
      #Wenn Sie der Benutzerspalte von devise einen Namen hinzugefügt haben, fügen Sie auch den folgenden Kommentar hinzu.
      # user.name = auth.info.name
      user.email = auth.info.email
      user.password = Devise.friendly_token[0,20]
    end
  end
end

Das hier angezeigte first_or_create war die erste Methode, die verwendet wurde. Es ist ganz praktisch ...

Wenn das von where gesuchte Objekt nicht in der DB vorhanden ist, wird nichts getan und nichts getan. Wenn das von "where" gesuchte Objekt in der Datenbank vorhanden ist, wird der Prozess nach "do" in das "user" -Objekt eingegeben und in der Datenbank gespeichert.

Ich fragte mich, ob ich verschiedene Dinge einmal mit Schienenkonsolen usw. ausprobieren sollte! Seien Sie versichert, dass die Verwendung von "Rails Console -s" keine Änderungen an Ihrer Datenbank vornimmt.

Bearbeiten Sie die Verarbeitung von Omniauth

omniauth_callbacks_controller.rb


# frozen_string_literal: true

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  # callback for google
  def google_oauth2
    callback_for(:google)
  end

  def callback_for(provider)
    #Benutzer früher.Methode beschrieben in rb(from_omniauth)Wird hier verwendet
    # 'request.env["omniauth.auth"]'Dies umfasst die vom Google-Konto erhaltene E-Mail-Adresse und Daten wie den Namen.
    @user = User.from_omniauth(request.env["omniauth.auth"])
    sign_in_and_redirect @user, event: :authentication
    set_flash_message(:notice, :success, kind: "#{provider}".capitalize) if is_navigational_format?
  end

  def failure
    redirect_to root_path
  end
end

Mit dem oben genannten denke ich, dass die sns-Authentifizierung mit Google durchgeführt werden kann! !!

Referenz

[Implementieren Sie die Benutzerregistrierung auf Facebook / Twitter / Google mit Devise & Omniauth mit explosiver Geschwindigkeit] (https://qiita.com/kazuooooo/items/47e7d426cbb33355590e)

Recommended Posts

SNS-Authentifizierung mit Rails Google
Erstellen Sie die Authentifizierungsfunktion in der Rails-Anwendung mit devise
Implementierung der Google-Anmeldung mithilfe der Google OAuth 2.0-Authentifizierung (Server Edition)
Suchfunktion mit [Rails] Ransack
[Schienen] Speichern Sie Bilder mit Carrierwave
Japanisieren Sie mit i18n mit Rails
[Rails] Japanische Lokalisierung mit Rails-i18n
Implementieren Sie die LTI-Authentifizierung in Rails
[Rails] Testcode mit Rspec
Fehler bei der Verwendung von Schienen Capybara
[Rails] Versuchen Sie, Faradays Middleware zu verwenden
Detaillierte Tipps zur Verwendung von Rails
Fehler beim Einführen der SNS-Authentifizierung
[Rails 6] Sternförmige Überprüfung mit Raty.js
[Implementierungsverfahren] Erstellen Sie eine Benutzerauthentifizierungsfunktion mithilfe von Hexerei in Rails
Wovon ich süchtig war, als ich die Google-Authentifizierung mit Rails implementierte
Spring Boot Tutorial Verwenden der Spring Security-Authentifizierung
Holen Sie sich PV (Ansichten) mit Impressionist ~ Rails
[Rails] Tag-Verwaltungsfunktion (unter Verwendung von Acts-as-Taggable-On)
[Rails 6] API-Entwicklung mit GraphQL (Query)
Passwort-Hashing und Authentifizierung mit JBcrypt
[Schienen 6] zerstören mit der Ressourcenmethode
[Rails] Statusaktualisierung mithilfe der Rake-Task
[Rails 6] Registrieren und Anmelden mit Devise + SNS-Authentifizierung (mehrere Links zulässig)