記録として一応残すのだけれど、 結局 twitter oauth だと mail address が返らないため、そのまま devise の流儀にあてはめることはできなかったりで hack が必要。 だからこの記事は思い出す様に残す。あてにはしないこと。
追加する gem はこんな感じ。omniauth- 各種は使うものだけでいい。
gem 'devise'
gem 'omniauth'
gem 'omniauth-hatena'
gem 'omniauth-github'
gem 'omniauth-twitter'
gem 'figaro'
bundle install したら、
rails g install:figaro
すると config/application.yml が作られて .gitignore にも
# Ignore application configuration
/config/application.yml
が足される。config/application.yml にはこんな感じで書く。
TWITTER_CONSUMER_KEY: "xxx"
TWITTER_CONSUMER_SECRET: "yyy"
GITHUB_CONSUMER_KEY: "zzz"
GITHUB_CONSUMER_SECRET: "aaa"
-
config/initializers/omniauth.rb に設定を書く。
Rails.application.config.middleware.use OmniAuth::Builder do # provider :hatena, # ENV['HATENA_CONSUMER_KEY'], # ENV['HATENA_CONSUMER_SECRET'], # { # scope: "write_public,read_public,write_private,read_private" # }
provider :twitter, ENV['TWITTER_CONSUMER_KEY'], ENV['TWITTER_CONSUMER_SECRET']
# provider :github, # ENV['GITHUB_CONSUMER_KEY'], # ENV['GITHUB_CONSUMER_SECRET'] end
-
Model を作る
rails g devise:install rails g devise user rails g model auth uid:string provider:string name:string user:references
メールを使う場合はとりあえず config/environments/development.rb に以下を書いた。
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
config/environments/production.rb はそれなりに。
# Email
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.default_url_options = { :host => config.app_domain }
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: '587',
enable_starttls_auto: true,
user_name: '',
password: '',
authentication => :plain,
domain => 'somedomain.com'
}
app/model/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
has_many :auths
end
-
Controller
rails g controller home index rails g controller auth create destroy