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

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

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

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

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Q&A

1回答

950閲覧

omniauthを利用したfacebook認証が実装できない

KK78795046

総合スコア13

Ruby on Rails 5

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

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

0グッド

1クリップ

投稿2019/06/29 08:54

編集2019/06/29 09:13

facebookでのログイン、新規登録機能を実装しようとして、新規登録のリンクを押すとターミナル上で以下のエラーが発生します。

Started GET "/users/auth/facebook/callback" for ::1 at 2019-06-29 17:40:29 +0900 I, [2019-06-29T17:40:29.628903 #65658] INFO -- omniauth: (facebook) Callback phase initiated. E, [2019-06-29T17:40:29.629625 #65658] ERROR -- omniauth: (facebook) Authentication failure! no_authorization_code: OmniAuth::Strategies::Facebook::NoAuthorizationCodeError, must pass either a `code` (via URL or by an `fbsr_XXX` signed request cookie) Processing by Users::OmniauthCallbacksController#failure as HTML Redirected to http://localhost:3000/users/sign_in Completed 302 Found in 1ms (ActiveRecord: 0.0ms)

gemfile

1gem 'devise' 2gem "omniauth-rails_csrf_protection" 3gem 'omniauth-facebook'

haml

1= link_to 'Facebookで登録', user_facebook_omniauth_callback_path 2 3※ちなみに 4= render "devise/shared/links" 5にしてクリックするとNot found. Authentication passthru. のエラーが発生

routes

1 devise_for :users, :controllers => { 2 :registrations => 'users/registrations', 3 :sessions => 'users/sessions', 4 :passwords => 'users/passwords', 5 :omniauth_callbacks=> 'users/omniauth_callbacks' 6 }

devise

1config.omniauth :facebook, "~~~~~~~(APPID)", "~~~~~~~~(KEY)"

user

1 devise :database_authenticatable, :registerable, 2 :recoverable, :rememberable, :validatable,:omniauthable 3~~~~ 4 def self.find_for_oauth(auth) 5 user = User.where(uid: auth.uid, provider: auth.provider).first 6 7 unless user 8 user = User.create( 9 uid: auth.uid, 10 provider: auth.provider, 11 email: User.dummy_email(auth), 12 password: Devise.friendly_token[0, 20] 13 ) 14 end 15 16 user 17 end 18 19 private 20 21 def self.dummy_email(auth) 22 "#{auth.uid}-#{auth.provider}@example.com" 23 end

applicationHelper

1 2 def resource_name 3 :user 4 end 5 6 def resource 7 @resource ||= User.new 8 end 9 10 def resource_class 11 User 12 end 13 14 def devise_mapping 15 @devise_mapping ||= Devise.mappings[:user] 16 end 17

omniauthCollbacksController

1 def facebook 2 callback_from :facebook 3 end 4 5 private 6 7 def callback_from(provider) 8 binding.pry 9 provider = provider.to_s 10 @user = User.find_for_oauth(request.env['omniauth.auth']) 11 12 if @user.persisted? 13 flash[:notice] = I18n.t('devise.omniauth_callbacks.success', kind: provider.capitalize) 14 sign_in_and_redirect @user, event: :authentication 15 else 16 session["devise.#{provider}_data"] = request.env['omniauth.auth'] 17 redirect_to new_user_registration_url 18 end 19 end

コントローラーでbinding.pryが聞かずに、そのままリダイレクトされて新規登録画面に飛んでしまいます。

よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

今更ですが、以下のようにPOSTメソッドを追加することで解決するのではないでしょうか?
参考:https://github.com/cookpad/omniauth-rails_csrf_protection
(こちらのREADMEに記載されている方法ですが)

after

haml

1= link_to 'Facebookで登録', user_facebook_omniauth_callback_path, method: :post

before

haml

1= link_to 'Facebookで登録', user_facebook_omniauth_callback_path

投稿2020/01/08 10:14

ikdnaht

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問