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

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

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

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

Ruby on Rails 6

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

OAuth

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

1438閲覧

RailsでSNS認証を実装したい

nyantaroo

総合スコア0

Ruby

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

Ruby on Rails 6

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

OAuth

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

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/05/18 08:47

編集2020/05/19 09:01

前提・実現したいこと

Rails 6.0.3
Ruby 2.7.1
devise なし

RailsでWebアプリを作成している初心者です。もともとdiviseを使用しない認証機能を作成しており、SNS認証機能を追加しようとしたのですが上手くいきません。
twitterでCallback URLを設定しようとしましたが、ローカルだとInvalidだと言われて登録できません。
本番環境のURLは登録できましたが、/auth/twitter にアクセスすると、404エラーが返ってきます。
イメージ説明

また、googleも試してみましたが、/auth/google_oauth2 にローカルでアクセスすると No route matches [GET] "/auth/google_oauth2" とエラーが出ます。

アプリを作成した時点ではrails5系だったのですが、途中でrails6にアップデートしました。その時にどこか上手くいっていない部分があったかもしれません。

該当のソースコード

※実際には<>の部分に入力されています。

env

1GOOGLE_CLIENT_ID="<ID>" 2GOOGLE_CLIENT_SECRET="<SECRET>" 3TWITTER_KEY='<KEY>' 4TWITTER_SECRET='<SECRET>'

lang

1Rails.application.config.middleware.use OmniAuth::Builder do 2 provider :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET'] 3 provider :twitter, ENV["TWITTER_KEY"], ENV["TWITTER_SECRET"] 4end

gemfilelock

1oauth (0.5.4) 2 oauth2 (1.4.4) 3 faraday (>= 0.8, < 2.0) 4 jwt (>= 1.0, < 3.0) 5 multi_json (~> 1.3) 6 multi_xml (~> 0.5) 7 rack (>= 1.2, < 3) 8 omniauth (1.9.1) 9 hashie (>= 3.4.6) 10 rack (>= 1.6.2, < 3) 11 omniauth-google-oauth2 (0.8.0) 12 jwt (>= 2.0) 13 omniauth (>= 1.1.1) 14 omniauth-oauth2 (>= 1.6) 15 omniauth-oauth (1.1.0) 16 oauth 17 omniauth (~> 1.0) 18 omniauth-oauth2 (1.6.0) 19 oauth2 (~> 1.1) 20 omniauth (~> 1.9) 21 omniauth-rails_csrf_protection (0.1.2) 22 actionpack (>= 4.2) 23 omniauth (>= 1.3.1) 24 omniauth-twitter (1.4.0) 25 omniauth-oauth (~> 1.1) 26 rack

lang

1 get '/login', to: 'sessions#new' 2 post '/login', to: 'sessions#create' 3 get 'auth/:provider/callback', to: 'sessions#create' 4 get 'auth/failure', to: redirect('/') 5 delete '/logout', to: 'sessions#destroy'

試したこと

本番環境の環境変数は設定しました。
ローカルサーバーの再起動もしました。 
twitterやgoogle側の設定はいくつかのサイトを見ながら見直しましたが、問題点が見つかりません。
twitterに関してはUIが変化していたのでミスがあるかもしれません。

新しくrails new して同じコードでhttp://127.0.0.1:3000/auth/google_oauth2に接続してみたところ、無事googleの認証ページにリダイレクトされました。
何が原因でrouteエラーになっているのでしょうか?

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

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

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

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

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

guest

回答1

0

自己解決

gemfile

1gem 'omniauth-rails_csrf_protection'

上記のgemを削除したらリダイレクトに成功しました。

投稿2020/05/20 00:33

nyantaroo

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問