Klicken Sie auf den Link zur Google-Authentifizierung
Wählen Sie ein Konto
** Erfolgreiche Zertifizierung !! **
--Einführung von Geräten --Erstellen Sie eine Buchungsfunktion mit Gerüst
Ich habe eine Anwendung erstellt, mit der ich mich anmelden und Beiträge erstellen kann.
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
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"
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
gem 'omniauth-google-oauth2'
Fügen Sie den obigen Edelstein hinzu
bundle install
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
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
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.
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! !!
[Implementieren Sie die Benutzerregistrierung auf Facebook / Twitter / Google mit Devise & Omniauth mit explosiver Geschwindigkeit] (https://qiita.com/kazuooooo/items/47e7d426cbb33355590e)
Recommended Posts