[RUBY] Authentification SNS à l'aide de Rails google

objectif

Cliquez sur le lien d'authentification google image.png

Sélectionnez un compte image.png

** Certification réussie !! ** image.png

Créer une base

--Introduire la devise --Créer une fonction de publication avec échafaudage ezgif.com-video-to-gif (1).gif

J'ai créé une application qui me permet de me connecter et de créer des messages.

Configurer google

image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png Si l'URL est un environnement de développement, entrez ceci http://localhost:3000/users/auth/google_oauth2/callback Si vous souhaitez l'utiliser dans un environnement de production, veuillez entrer ici http: // URL de l'environnement de production / users / auth / google_oauth2 / callback

Je vais éditer le code

Définissez les variables d'environnement.

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']

J'ai utilisé dotenv-rails pour gérer les variables d'environnement.

gemfile


gem 'dotenv-rails'

installation groupée. Créez .env directement sous le répertoire racine de l'application

Copiez l'ID client suivant, le secret client

image.png

Collez-le dans .env comme suit

.env


GOOGLE_CLIENT_ID='Entrez l'ID client'
GOOGLE_CLIENT_SECRET='Secret du client'

Pour les variables d'environnement, je pense que c'est une bonne idée d'ajouter .env à .ignore lors de la poussée vers github.

.ignore


#Ajoutez ce qui suit
.env

Modifier le gemfile

gemfile


gem 'omniauth-google-oauth2'

Ajoutez la gemme ci-dessus

bundle install

Modification du routage

gemfile


Rails.application.routes.draw do
  #Notez que lors de la modification du contrôleur de périphérique, les modifications ne seront pas reflétées sauf si ce qui suit est décrit.
  devise_for :users, controllers: {
    #Si vous modifiez la hiérarchie des appareils, modifiez le chemin en conséquence.
    omniauth_callbacks: "users/omniauth_callbacks"
  }

  resources :posts

  root 'posts#index'
end

Ajouter des colonnes à la base de données

Créez la colonne provider colonne requise pour l'authentification et le fichier de migration pour créer la colonne ʻuid`

$ rails g migration AddOuthColumnToUsers provider:string uid:string

rails db:migrate

modifier le modèle utilisateur

J'écrirai le processus dans ʻuser.rb`

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,
         #Ajoutez ce qui suit
         #Lors de l'authentification autre que Google%i[twitter, facebook]Etc
         :omniauthable, omniauth_providers: %i[google_oauth2]

  #Créer une méthode de classe
  def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
      #Si vous avez ajouté un nom à la colonne utilisateur de l'appareil, ajoutez également le commentaire suivant.
      # user.name = auth.info.name
      user.email = auth.info.email
      user.password = Devise.friendly_token[0,20]
    end
  end
end

Le first_or_create qui apparaît ici était la première méthode à utiliser. C'est assez pratique ...

Si l'objet recherché par «where» n'existe pas dans la base de données, rien n'est fait et rien n'est fait. Si l'objet recherché par «where» existe dans la base de données, le processus après «do» est entré dans l'objet «utilisateur» et enregistré dans la base de données.

Je me suis demandé si je devais essayer diverses choses en utilisant une fois rails console -s etc. Soyez assuré que l'utilisation de rails console -s n'apportera aucune modification à votre base de données.

Modifier le traitement d'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)
    #Utilisateur plus tôt.Méthode décrite en rb(from_omniauth)Est utilisé ici
    # 'request.env["omniauth.auth"]'Cela inclut l'adresse e-mail obtenue à partir du compte googole et des données telles que le nom.
    @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

Avec ce qui précède, je pense que l'authentification sns peut se faire avec google! !!

référence

[Implémentez l'enregistrement des utilisateurs sur Facebook / Twitter / Google à une vitesse fulgurante à l'aide de Devise & Omniauth] (https://qiita.com/kazuooooo/items/47e7d426cbb33355590e)

Recommended Posts

Authentification SNS à l'aide de Rails google
Créer une fonction d'authentification dans l'application Rails à l'aide de devise
Mise en œuvre de Google Sign-In à l'aide de l'authentification Google OAuth 2.0 (édition serveur)
Fonction de recherche à l'aide de [rails] ransack
[Rails] Enregistrez des images à l'aide de carrierwave
Japaneseize en utilisant i18n avec Rails
[Rails] Localisation japonaise à l'aide de rails-i18n
Implémenter l'authentification LTI dans Rails
[Rails] Code de test à l'aide de Rspec
Erreur lors de l'utilisation des rails capybara
[Rails] Essayez d'utiliser le middleware de Faraday
Conseils détaillés lors de l'utilisation de Rails
Erreur lors de l'introduction de l'authentification SNS
[Rails 6] Revue en forme d'étoile utilisant Raty.js
[Procédure d'implémentation] Créer une fonction d'authentification utilisateur à l'aide de sorcellerie dans Rails
Ce à quoi j'étais accro lors de la mise en œuvre de l'authentification Google avec des rails
Tutoriel Spring Boot à l'aide de l'authentification Spring Security
Obtenez PV (vues) en utilisant impressionniste ~ Rails
[Rails] Fonction de gestion des balises (en utilisant des actes comme des balises)
[Rails 6] Développement d'API à l'aide de GraphQL (Query)
Hachage et authentification de mot de passe à l'aide de JBcrypt
[Rails 6] détruit en utilisant la méthode des ressources
[Rails] Mise à jour de l'état à l'aide de la tâche Rake
[Rails 6] Enregistrez-vous et connectez-vous avec l'authentification Devise + SNS (plusieurs liens sont autorisés)