[RUBY] Rails6 OmniAuth activestorage Benutzerbild abrufen

Eine Notiz für sich selbst von einem ewigen Anfänger. Das Schienenlernen begann 3 Monate. Vorerst würde ich es begrüßen, wenn Sie darüber nachdenken könnten, wie es funktioniert. Wenn Sie der Meinung sind, dass eine solche Person in Ordnung ist, wäre ich Ihnen dankbar, wenn Sie mir einen freundlichen Kommentar geben könnten.

Zweck dieses Artikels

Speichern Sie das Profilbild des Benutzers im aktiven Speicher. Selbst als ich gegoogelt habe, habe ich nicht viele Artikel über aktiven Speicher gesehen, da es sich nur um Trägerwellen handelte. Deshalb habe ich ihn in der Hoffnung gepostet, dass sich Menschen in derselben Situation befinden würden.

Umgebung Ruby 2.7.1p83 Rails 6.0.3.3

Voraussetzungen

Die Anmeldefunktion von devise wurde implementiert.

OmniAuth hat bereits Login-Authentifizierungsfunktionen für Twitter, Google, Facebook usw. implementiert.

Ich habe auf den folgenden Artikel verwiesen ・ Verfahrensbezogen https://qiita.com/kazuooooo/items/47e7d426cbb33355590e ・ Einführung von OmniAuth https://qiita.com/LuckHackMahiro/items/9dfca6e67777a2161240

Referenz ・ So speichern Sie die Bild-URL im aktiven Speicher https://qiita.com/gomasio1010/items/09c6ee58ed4c95f109ff

Es war sehr hilfreich! Vielen Dank.

Speichern Sie die Bild-URL im aktiven Speicher Vorausgesetzt, die Funktion kann implementiert werden

app/models/user.rb

require "open-uri"  #Hier
class User < ApplicationRecord

  #Kürzung

  def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.name = auth.info.name
      user.password = Devise.friendly_token[0, 20]
      user.email = auth.info.email    
      user.email = User.dummy_email(auth) if user.provider == "twitter" 
      avatar = open("#{auth.info.image}") #Hier
      user.image.attach(io: avatar, filename: "user_avatar.jpg ") #Hier
    end
  end

 #Kürzung

end

Ich konnte das Bild erhalten, indem ich mich auf den Artikel bezog. Ich habe nicht viele Artikel über aktiven Speicher gesehen, daher war es sehr hilfreich.

Es wurde gemunkelt, dass das Bild klein und rau sein würde, also habe ich versucht, es so aussehen zu lassen, als wäre es größer. Es gab einige, die es auf der Modellseite spezifizierten, wenn sie verschiedene Dinge betrachteten.

config/initializers/devise.rb

  config.omniauth :facebook, ENV['FACEBOOK_ID'], ENV['FACEBOOK_SECRET_KEY'], :image_size => 'large'#Dies
  config.omniauth :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET']
  config.omniauth :twitter, ENV['TWITTER_API_KEY'], ENV['TWITTER_API_SECRET_KEY'], callback_url: "http://localhost:3000/users/auth/twitter/callback", :image_size => 'original'#Dies

Die Implementierung im Zusammenhang mit der Anmeldeauthentifizierung funktioniert je nach Tageszeit möglicherweise nicht ordnungsgemäß, oder sie funktioniert möglicherweise nicht ordnungsgemäß, wenn Cookies im Browser verbleiben. Daher scheint es sinnvoll, dies geduldig zu tun.

Recommended Posts

Rails6 OmniAuth activestorage Benutzerbild abrufen
[Schienen] Implementieren Sie die Benutzersuchfunktion
Rails Posts und User Linkage
Rails Active_storage - Vereinfachen Sie das Speichern von Bildern -
Rails-Bild wird automatisch verschoben [Swiper]
[Rails] Implementieren Sie die Image-Posting-Funktion
[Rails] [ActiveStorage] Überprüfen Sie, ob ein bestimmter Benutzer einen Avatar hat