質問編集履歴

1 コードを追記しました

退会済みユーザー

退会済みユーザー

2017/06/17 13:01  投稿

Facebook から承認されませんでした。理由:Invalid credentialsエラーが出ます
Ruby on Rails 5.0.0.1で下記のエラーが出てしまいます。
```ここに言語を入力
Facebook から承認されませんでした。理由:Invalid credentials
```
FacebookのOauth認証画面で[ログイン]・[パスワード]を追加して、リダイレクト先の画面でこのような文言が出てきます。
検索したら、
[http://totutotu.hatenablog.com/entry/2016/02/24/194153](http://totutotu.hatenablog.com/entry/2016/02/24/194153)
ダウングレードが必要だということで、使っていたgem omniauth-facebookを下げてみたのですが...
```ここに言語を入力
gem 'omniauth-facebook', '~> 3.0.0'
```
やはり同じエラーが出てしまいました。
なぜでしょうか。
なぜでしょうか。
失礼いたしました。
##該当するソースコード
▼ User.rb
```Ruby
class User < ApplicationRecord
 # Include default devise modules. Others available are:
 # :confirmable, :lockable, :timeoutable and :omniauthable
 devise :database_authenticatable, :registerable,
        :recoverable, :rememberable, :trackable, :validatable,
        :omniauthable
 class << self
   def find_for_facebook_oauth(auth)
     where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
       user.email = auth.info.email
       user.password = Devise.friendly_token[0,20]
       user.name = auth.info.name
     end
   end
   def create_unique_string
     SecureRandom.uuid
   end
   def create_unique_email
     User.create_unique_string + "@example.com"
   end
 end
end
```
▼ users/omniauth_callbacks_controller.rb
```Ruby
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
 def facebook
   @user = User.find_for_facebook_oauth(request.env["omniauth.auth"])
   if @user.persisted?
     sign_in_and_redirect @user, :event => :authentication
     set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
   else
     session["devise.facebook_data"] = request.env["omniauth.auth"]
     redirect_to new_user_registration_url
   end
 end
end
```
▼ Devise.rb
```Ruby
Devise.setup do |config|
 config.omniauth :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET']
end
```
▼ .env
```ここに言語を入力
FACEBOOK_APP_ID="XXXXXXXXX"
FACEBOOK_APP_SECRET="XXXXXXXXXXXXXX"
```
▼ routes.rb
```Ruby
Rails.application.routes.draw do
 devise_for :users, controllers: { sessions: 'users/sessions', registrations: 'users/registrations', omniauth_callbacks: 'users/omniauth_callbacks' }
 root 'pages#index'
 get 'pages/show'
end
```
  • Ruby

    11204 questions

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

  • Ruby on Rails

    10693 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る