永遠の初心者による自分のためのメモ。
Rails学習開始3ヶ月。
とりあえずこれで動きました程度に考えていただければ幸いです。
こうした方がええやんと言うご意見がある方は優しいコメント頂けると嬉しいです。
この記事の目的
twitter認証はメールアドレスを取得しないので、ランダムメールアドレスを生成する。
google、facebook認証は、正規のメールアドレスを取得する。
twitterはランダムアドレス。他は、正規のアドレスで条件分岐させる。
環境
Ruby 2.7.1p83 Rails 6.0.3.3前提条件
deviseによるログイン機能実装済み。
OmniAuthによるTwitter、google、facebookなどのログイン認証機能実装済み。
私は、以下の記事を参考にさせて頂きました
・手続き関連 https://qiita.com/kazuooooo/items/47e7d426cbb33355590e ・OmniAuth導入 https://qiita.com/LuckHackMahiro/items/9dfca6e67777a2161240条件分岐 : TwitterかTwitter以外
機能実装できている前提で、user.rb
def self.first_or_create_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"#ここ
url = URI.parse("#{auth.info.image}")
avatar = url.open
user.image.attach(io: avatar, filename: "user_avatar.jpg")
end
end
としたら、twitterではランダムアドレス。
google、facebookでは正規のアドレスが取得する事ができました。
条件分岐がうまくいって嬉しかったです。