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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

1671閲覧

Facebookログインを追加したいです(rails)

yamady

総合スコア176

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2017/05/19 03:48

編集2017/05/20 07:01

いつもお世話になっております。
Ruby(RubyonRails)チュートリアルを見ながら、作成したユーザー登録画面にFacebookログイン機能を追加したいと考えています。

いざ、登録のためにFacebookメールアドレスとパスワードを入力すると、うまくいきません。下記URLで真っ白な画面が表示されます。

http://XXXX.jp/auth/facebook/callback?code=AQBGo-1k6ip2am4LhTYw2EDseNGFlColzU9a3jDjhwx1hLQCHyeSPqqG0OGkIoqjpUP0OMhqKkzbAd5_e4dmGbRzOZawOAmMUKWd-e6hTHUGGXRn6qBbB2rt4asO4tcQJseH1wltytpf_6rEe-RCm_Oya7pJrVH8I_8JMmtPCCdLN7gWL7sh2UyIDLzw6_OgMzQ3QnGbgXMrmJ6rsHfMjln_go0kyG3kWpsYj-fhj0z_d893-JnGwJW5IGrmkpTpao8ta3ajJAV_SA6ip3IxVbRjSOhC32Ki9A26tZDMXPwdoTIZxFLKC3jvJJsVY2JLlHc&state=789ca451d73fa5358d905cc8619e4854e099169d7f4fb9d1#_=_

開発環境:Ruby on Rails 5.0.0.1

###該当するソースコード

新規登録画面

Ruby

1<% provide(:title, "新規会員登録") %> 2<section class="register"> 3 <%= form_for(@user, url: signup_path) do |f| %> 4 <%= render 'shared/error_messages', object: f.object %> 5 <div class="title page-form account-form"> 6 <h2>新規会員登録</h2> 7 <%= link_to "Facebookで登録する", "/auth/facebook", id: "sign_in", class: "btn btn-form fb-btn" %> 8 <div class="form-group"> 9 <label for="exampleInputName">メールアドレスで登録する</label> 10 <%= f.text_field :name, :placeholder => "ユーザー名", class: "form-control" %> 11 </div> 12 <div class="form-group"> 13 <%= f.email_field :email, :placeholder => "メールアドレス", class: "form-control" %> 14 </div> 15 <div class="form-group"> 16 <%= f.password_field :password, :placeholder => "パスワード", class: "form-control" %> 17 </div> 18 <div class="form-group"> 19 <%= f.password_field :password, :placeholder => "パスワードの確認", class: "form-control" %> 20 </div> 21 <div> 22 <input type="checkbox" checked="checked"> 利用規約およびプライバシーポリシーに同意します 23 </div> 24 <%= f.submit "新規会員登録する", class: "btn btn-form" %> 25 <% end %> 26 </div> 27</section>

ユーザーコントローラー

Ruby

1class UsersController < ApplicationController 2 before_action :logged_in_user, only: [:edit, :update] 3 before_action :correct_user, only: [:edit, :update] 4 5 def show 6 @user = User.find(params[:id]) 7 @reviews = @user.reviews.paginate(page: params[:page], :per_page => 10) 8 end 9 10 def new 11 @user = User.new 12 end 13 14 def create 15 if env['ominiauth.auth'].present? 16 # Facebookログイン 17 @user = User.from_omniauth(env['omniauth.auth']) 18 if @user.save(context: :facebook_login) 19 fb = "Facebook" 20 sign_in @user 21 flash[:success] = "#{fb}ログインしました。" 22 redirect_to url 23 else 24 if fb.present? 25 redirect_to auth_failure_path 26 else 27 render 'new' 28 end 29 end 30 else 31 # 通常サインアップ 32 @user = User.new(user_params) 33 if @user.save 34 @user.send_activation_email 35 flash[:info] = "メールアドレスに確認メールをお送りしましたのでご確認ください。" 36 redirect_to root_url 37 else 38 render 'new' 39 end 40 end 41 end 42 43 def edit 44 @user = User.find(params[:id]) 45 end 46 47 def update 48 if @user.update_attributes(user_params) 49 flash[:success] = "プロフィールを更新しました" 50 redirect_to @user 51 else 52 render 'edit' 53 end 54 end 55 56 private 57 58 def user_params 59 params.require(:user).permit(:name, :email, :password, 60 :password_confirmation, :image, :remember_digest, :background) 61 end 62 63 # beforeアクション 64 65 # 正しいユーザーかどうか確認 66 def correct_user 67 @user = User.find(params[:id]) 68 redirect_to(root_url) unless current_user?(@user) 69 end 70end

ユーザーモデル

Ruby

1class User < ApplicationRecord 2 has_many :reviews, dependent: :destroy 3 attr_accessor :remember_token, :activation_token, :reset_token 4 before_save :downcase_email 5 before_create :create_activation_digest 6 validates :name, presence: true, length: { maximum: 50 } 7 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i 8 validates :email, presence: true, length: { maximum: 255 }, 9 format: { with: VALID_EMAIL_REGEX }, 10 uniqueness: { case_sensitive: false } 11 validates :background, length: { maximum: 50 } 12 has_secure_password 13 validates :password, presence: true, length: { minimum: 6 }, allow_nil: true 14 validates :password, presence: false, on: :facebook_login 15 mount_uploader :image, ImageUploader 16 17 # 渡された文字列のハッシュ値を返す 18 def User.digest(string) 19 cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : 20 BCrypt::Engine.cost 21 BCrypt::Password.create(string, cost: cost) 22 end 23 24 # ランダムなトークンを返す 25 def User.new_token 26 SecureRandom.urlsafe_base64 27 end 28 29 # 永続セッションのためにユーザーをデータベースに記憶する 30 def remember 31 self.remember_token = User.new_token 32 update_attribute(:remember_digest, User.digest(remember_token)) 33 end 34 35 # 渡されたトークンがダイジェストと一致したらtrueを返す 36 def authenticated?(attribute, token) 37 digest = send("#{attribute}_digest") 38 return false if digest.nil? 39 BCrypt::Password.new(digest).is_password?(token) 40 end 41 42 # ユーザーのログイン情報を破棄する 43 def forget 44 update_attribute(:remember_digest, nil) 45 end 46 47 # アカウントを有効にする 48 def activate 49 update_attribute(:activated, true) 50 update_attribute(:activated_at, Time.zone.now) 51 end 52 53 # 有効化用のメールを送信する 54 def send_activation_email 55 UserMailer.account_activation(self).deliver_now 56 end 57 58 # パスワード再設定の属性を設定する 59 def create_reset_digest 60 self.reset_token = User.new_token 61 update_attribute(:reset_digest, User.digest(reset_token)) 62 update_attribute(:reset_sent_at, Time.zone.now) 63 end 64 65 # パスワード再設定のメールを送信する 66 def send_password_reset_email 67 UserMailer.password_reset(self).deliver_now 68 end 69 70 # パスワード再設定の期限が切れている場合はtrueを返す 71 def password_reset_expired? 72 reset_sent_at < 2.hours.ago 73 end 74 75 # Facebookログイン 76 def self.from_omniauth(auth) 77 # emailの提供は必須とする 78 user = User.where('email = ?', auth.info.email).first 79 if user.blank? 80 user = User.new 81 end 82 user.uid = auth.uid 83 user.name = auth.info.name 84 user.email = auth.info.email 85 user.image = auth.info.image 86 user.oauth_token = auth.credentials.token 87 user.oauth_expires_at = Time.at(auth.credentials.expires_at) 88 user 89 end 90 91 def feed 92 Review.where("user_id = ?", id) 93 end 94 95 private 96 97 # メールアドレスをすべて小文字にする 98 def downcase_email 99 self.email = email.downcase 100 end 101 102 # 有効化トークンとダイジェストを作成および代入する 103 def create_activation_digest 104 self.activation_token = User.new_token 105 self.activation_digest = User.digest(activation_token) 106 end 107end

###コンソールのエラー
イメージ説明

コンソール上では上記のようなエラーが表示されています。

gem Deviceを使うべきなのでしょうか?
既存のUserモデルに追加したいので、非常に困っています・

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

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

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

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

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

gouf

2017/05/19 05:28

Web ブラウザの開発者コンソールになにかエラーは表示されていますか
yamady

2017/05/19 07:15

コメントありがとうございます!コンソールのエラーを追記しました!
guest

回答1

0

自己解決

deviseで作りなおすことにしました。

投稿2017/05/22 16:27

yamady

総合スコア176

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問