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

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

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

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

Ruby

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

0回答

2609閲覧

【rails4】devise+omniauth-instagramを使って認証機能を実装したい

tkkmyjm

総合スコア13

Devise

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

Ruby

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2016/05/15 09:45

編集2016/05/16 12:10

###前提・実現したいこと

初心者です。
Ruby on Railsにてサービスのログイン機能を作成しております。
gemのdeviseとomniauth-instagramを使って認証機能を実装しようと考えています。インスタデベロッパーでCLIENT ID等取得し、instagramを介してのログインボタンまでは表示することはできましたが、いざログインボタンを押すと下記のようなエラーが返されます。

ざっくりですが下記これまでに実行した内容です、
①gem deviseとomniauth-instagramをインストール
②rails g devise userでユーザーモデルを作成
③OmniAuthでuidとproviderをカラムとして利用したいため
rails g migration AddColumnsToUsers uid:string provider:string
④omniauth_callbacks_controllerを作成し、Userコントローラにコールバック処理を実装

Redirect URIが登録されているものと違うというエラーかと思うのですが、どこかのファイルに登録したURLをコーディングしなければならないのでしょうか?
Facebookやtwitterで同じことが起きていないか調べてみましたが見つけることができませんでした。
とんちんかんなことを申していましたら恐縮ですが、是非対処法をご教示頂けないでしょうか。よろしくお願い致します。

###発生している問題・エラーメッセージ

エラーメッセージ {"code": 400, "error_type": "OAuthException", "error_message": "Redirect URI does not match registered redirect URI"}

##Gemfile

source 'https://rubygems.org' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' gem 'rails', '4.2.5' #gem 'bootstrap-sass', '3.3.1' #gem 'sprockets', '2.11.0' gem 'devise', '3.4.1' gem 'instagram' gem 'omniauth-instagram' # http関連。サーバー側とrest fulにやり取り可能。 ## gem 'rest-client' #uri関連。api叩いて受け取るデータ形式がjsonなので。 ## gem 'json' # Use sqlite3 as the database for Active Record gem 'sqlite3' # Use SCSS for stylesheets gem 'sass-rails', '~> 5.0' # Use Uglifier as compressor for JavaScript assets gem 'uglifier', '>= 1.3.0' # Use CoffeeScript for .coffee assets and views gem 'coffee-rails', '~> 4.1.0' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'therubyracer', platforms: :ruby # Use jquery as the JavaScript library gem 'jquery-rails' # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks gem 'turbolinks' # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder gem 'jbuilder', '~> 2.0' # bundle exec rake doc:rails generates the API under doc/api. gem 'sdoc', '~> 0.4.0', group: :doc # Use ActiveModel has_secure_password # gem 'bcrypt', '~> 3.1.7' # Use Unicorn as the app server # gem 'unicorn' # Use Capistrano for deployment # gem 'capistrano-rails', group: :development group :development, :test do # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug' end group :development do # Access an IRB console on exception pages or by using <%= console %> in views gem 'web-console', '~> 2.0' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' end

##config/routes.rb

Rails.application.routes.draw do get 'users/show' devise_for :users, :controllers => { :registrations => "registrations", :omniauth_callbacks => "omniauth_callbacks" } resource :user, only: [:show] root 'static_pages#home' ・ ・ ・

##models/user.rb

class User < ActiveRecord::Base # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :omniauthable, :omniauth_providers => [:instagram] def self.from_omniauth(auth) where(auth.slice(:provider, :uid)).first_or_create do |user| user.email = User.dummy_email(auth) end end def self.new_with_session(params, session) if session["devise.user_attributes"] new(session["devise.user_attributes"], without_protection: true) do |user| user.attributes = params user.valid? end else super end end

##config/initializers/devise.rb

Devise.setup do |config| ・ ・ ・ config.scoped_views = true #それぞれ別々の認証画面を出すことが出来る require "omniauth-instagram" config.omniauth :instagaram, ENV['CLIENT_ID'], ENV['CLIENT_SECRET'], :strategy_class => OmniAuth::Strategies::Instagram end

##controllers/omniauth_callbacks_controller.rb

class OmniauthCallbacksController < Devise::OmniauthCallbacksController def all # profiderとuidでuserレコードを検索。存在しなければ、新たに作成する user = User.from_omniauth(request.env["omniauth.auth"]) # userレコードが既に保存されているか if user.persisted? # ログインに成功 flash.notice = "ログインしました!!" sign_in_and_redirect user else # ログインに失敗し、サインイン画面に遷移 session["devise.user_attributes"] = user.attributes redirect_to new_user_registration_url end end alias_method :instagram, :all #alias_method(new_name, original_name end

###補足情報(言語/FW/ツール等のバージョンなど)
バージョン
rails 4.2.5
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問