質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

1768閲覧

Rails4 facebook twitter mailアドレス登録について

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/07/24 22:54

Omniauthと言うgemを使いfacebook認証とtwitter認証を作りました。facebook認証時にメールアドレスが取れないのですが、どうしたらよいでしょうか?
modelのemail: User.dummy_email(auth)と言うところでfacebook認証時にもダミーアドレスを入れているので取れないということはわかるのですが、どうしたらよいかわかりません

self.dummy_email(auth)を色々いじってみましたが、うまくいきませんでした。。

ruby

1class User < ActiveRecord::Base 2 # Include default devise modules. Others available are: 3 # :lockable, :timeoutable and :omniauthable 4 devise :database_authenticatable, :registerable, :confirmable, 5 :recoverable, :rememberable, :trackable, :validatable, :omniauthable, :async 6 7 # いらないかもユーザネームでログンするときだけいる 8 #, :authentication_keys => [:login] 9 10 attr_accessor :login 11 12 13 14 def update_without_current_password(params, *options) 15 params.delete(:current_password) 16 17 if params[:password].blank? && params[:password_confirmation].blank? 18 params.delete(:password) 19 params.delete(:password_confirmation) 20 end 21 22 result = update_attributes(user_params(params), *options) 23 clean_up_passwords 24 result 25 end 26 27 28 # cancancan で使用する権限管理用のロール 29 def has_role? role_name 30 roles.exists?(name: role_name) 31 end 32 33 34 35 36 37 def self.find_for_oauth(auth) 38 user = User.where(uid: auth.uid, provider: auth.provider).first 39 unless user 40 user = User.create( 41 uid: auth.uid, 42 name: auth.info.name, 43 user_name: User.dummy_user_name(auth), 44 provider: auth.provider, 45 email: User.dummy_email(auth), 46 password: Devise.friendly_token[8, 128], 47 confirmed_at: Time.now 48 ) 49 end 50 user 51 end 52 53 54 55 56 private 57 58 def self.dummy_email(auth) 59 if auth.info.email.blank? 60 "#{auth.uid}-#{auth.provider}@example.com" 61 else 62 auth.info.email 63 end 64 end 65 66 def self.dummy_user_name(auth) 67 if auth.info.user_name.blank? 68 "#{Random.rand(1..9999)}#{auth.provider}#{auth.uid}" 69 else 70 auth.info.nickname 71 end 72 end 73 74 validates :user_name, 75 :uniqueness => { 76 :case_sensitive => false 77 }, 78 :format => { with: /\A[a-z0-9]+\z/i }, 79 :length => { maximum: 40 } 80 81 82 def self.current_user 83 Thread.current[:current_user] 84 end 85 86 87 def self.current_user=(user) 88 Thread.current[:current_user] = user 89 end 90 91 92 93 # ユーザーからの入力は信用しない:許可されたパラメータだけ変更できるようにする 94 def user_params params 95 params.permit(:user_name, :email, :password, :password_confirmation) 96 end 97end 98

ruby

1class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 2 3 def facebook 4 callback_from :facebook 5 end 6 7 def twitter 8 callback_from :twitter 9 end 10 11 private 12 13 def callback_from(provider) 14 provider = provider.to_s 15 @user = User.find_for_oauth(request.env['omniauth.auth']) 16 if @user.persisted? 17 flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: provider.capitalize) 18 sign_in_and_redirect @user, event: :authentication 19 else 20 if provider == 'twitter' 21 session["devise.twitter_data"] = request.env["omniauth.auth"].except("extra") 22 else 23 session["devise.facebook_data"] = request.env["omniauth.auth"] 24 end 25 redirect_to new_user_registration_url 26 end 27 end 28 29 30 31

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

facebook 認証もRuby も使用しないので外しているかもしれませんが、こちらが参考になりませんか?
2015年7月9日以降にFacebook認証でメールアドレスが取れない問題とその対策
Qiita でも同じような記事を見た気がしたのですが探せませんでした^^;

投稿2016/07/26 23:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問