[ruby] omniauth-twitterでOAuth::Unauthorized at /auth/twitter っていうエラーがでる
かなり今更感ありそうなomniauthの話。
omniauthでサクッと認証する部分を作ろうとしたら
OAuth::Unauthorized at /auth/twitter
401 Unauthorized
っていうエラーに遭遇した。
backtraceが出てたけどとりあえずしばらくググったら回答を発見。
OmniAuthのFAQに出てました
twitterの開発者向けページでアプリ登録するときにcallback urlは任意だったので、めんどくさくて入力しなかったのが原因みたい。
FAQにある通り、開発者ページで、
callback urlにOmniAuthのtwitter用callback url
を設定後、「Recreate my access token」を押して、アプリを動かしてみたら無事動きましたとさ。
※追記
どこかのサイトで見たけど、twitterの開発者ページのoauth settingのaccess levelがread onlyじゃ動かないからread and writeにする的な話は今回の件とは関係ないみたいでした。
以下の手順は完全にメモなので結構どうでもよい(Whatever.)
作業メモ
サンプル用のディレクトリ作ってGemfileをつくる
$ mkdir sample_omniauth
$ cd sample_omniauth
$ bundle init
Gemfileを編集
# A sample Gemfile source "https://rubygems.org" gem 'sinatra' gem 'omniauth-twitter'
bundle install
$ bundle install --path vendor/bundle
sinatraのconfig.ruを作成
# coding: utf-8 require 'rubygems' require 'bundler' Bundler.require require './app.rb' run Sinatra::Application
app.rbを作成
# coding: utf-8 require 'rubygems' require 'sinatra' require 'omniauth' enable :sessions, :logging # twitterのkeyとかをomniauthに設定 use OmniAuth::Builder do provider :twitter, 'Consumer key', 'Consumer secret' end # root get '/' do '<a href="/auth/twitter">twitter</a>' end # omniauthのOAuth callback get '/auth/:name/callback' do request.env['omniauth.auth'].inspect end