Cliquez sur le lien d'authentification google
Sélectionnez un compte
** Certification réussie !! **
--Introduire la devise --Créer une fonction de publication avec échafaudage
J'ai créé une application qui me permet de me connecter et de créer des messages.
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
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
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
gemfile
gem 'omniauth-google-oauth2'
Ajoutez la gemme ci-dessus
bundle install
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
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
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.
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! !!
[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