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

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

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

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

Ruby

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

Twitter

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

Ruby on Rails

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

Q&A

解決済

1回答

748閲覧

Ruby on Railにてdevise + omniauthを使ってのTwitterログインが実装できない

ul_

総合スコア15

Devise

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

Ruby

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

Twitter

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

Ruby on Rails

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

0グッド

0クリップ

投稿2018/09/29 06:18

編集2018/09/29 12:21

こんにちは。
現在Webサービスを作っており、Twitterログインを実装したいのですが、以下のようなエラーが出てしまいます。

上の方にエラー

エラーが出るといっても、Railsでよく見る赤い画面ではなく、

Could not authenticate you from Twitter because "Invalid credentials".
と書かれているのみです。Inavalid credentialsとは何か分からない上。

エラーで検索すると、似たような質問などが見受けられ、gemのバージョンを下げるなどがありました。
しかし、それらは数年前の投稿でバージョンが上げても対応できるものが良いと思っています。

参考にしているのは、Qiitaの以下の記事です。
https://qiita.com/cigalecigales/items/f4274088f20832252374

omniauth_callbacks_controller.rb

Ruby

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

User.rb

Ruby

1class User < ApplicationRecord 2 # Include default devise modules. Others available are: 3 # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable 4 5 devise :database_authenticatable, :registerable, 6 :recoverable, :rememberable, :validatable, 7 :timeoutable, :omniauthable, omniauth_providers: [:twitter] 8 9 def self.from_omniauth(auth) 10 find_or_create_by(provider: auth["provider"], uid: auth["uid"]) do |user| 11 user.provider = auth["provider"] 12 user.uid = auth["uid"] 13 user.username = auth["info"]["nickname"] 14 end 15 end 16 17 def self.new_with_session(params, session) 18 if session["devise.user_attributes"] 19 new(session["devise.user_attributes"]) do |user| 20 user.attributes = params 21 end 22 else 23 super 24 end 25 end 26end

/app/views/devise/shared/_links.html.erb

erb

1<%- if controller_name != 'sessions' %> 2 <%= link_to "Log in", new_session_path(resource_name) %><br /> 3<% end -%> 4 5<%- if devise_mapping.registerable? && controller_name != 'registrations' %> 6 <%= link_to "Sign up", new_registration_path(resource_name) %><br /> 7<% end -%> 8 9<%- if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations' %> 10 <%= link_to "Forgot your password?", new_password_path(resource_name) %><br /> 11<% end -%> 12 13<%- if devise_mapping.confirmable? && controller_name != 'confirmations' %> 14 <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br /> 15<% end -%> 16 17<%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %> 18 <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br /> 19<% end -%> 20 21<%- if devise_mapping.omniauthable? %> 22 <%- resource_class.omniauth_providers.each do |provider| %> 23 <%= link_to "Sign in with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider) %><br /> 24 <% end -%> 25<% end -%> 26

他に原因と思われるファイルのがありましたら、提示いたします。
よろしくお願いします

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

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

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

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

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

guest

回答1

0

ベストアンサー

OmniAuthとOmniAuth Twitterのバージョンが気になりますが…。

OmniAuth Twitterを使っている場合、config/initializers/omniauth.rbなどのファイルに、

ruby

1Rails.application.config.middleware.use OmniAuth::Builder do 2 provider :twitter, "API_KEY", "API_SECRET" 3end

などと書く必要がありますが、ここのAPI_KEY, API_SECRETの値は正しく設定されていますか?

その他詳しい使い方は、以下のURLに書かれています。一度じっくり読んでみるといいかと思います。

https://github.com/arunagw/omniauth-twitter

投稿2018/10/06 14:29

takahashim

総合スコア1877

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

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

ul_

2018/10/07 04:45

ご回答ありがとうございます。TwitterのAPIキーを新たに取得し、モデルを追加すると出来るようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問