以下の GWアドベントカレンダー 「1つサービスを作る」の2日目記事です。
まずはプロフィール画面まで作ります。
プロフィール画面作成する
userモデルの変更
次にuserモデルに、Twitterで取得できる情報追加できるようにします。
そのために前に作成したマイグレーションファイルを上書きする。
rails generate migration AddColumnsToUsers uid:string provider:string name:string description:string location:string website:string image:string twitter:string --force rails db:migrate:reset
app/models/user.rb を書き換える。
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable, :omniauthable
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.email = User.dummy_email(auth)
user.password = Devise.friendly_token[0, 20]
user.name = auth.info.name
user.description = auth.info.description
user.location = auth.info.location
user.website = auth.info.urls.Website
user.image = auth.info.image
user.twitter = auth.info.urls.Twitter
end
end
private
def self.dummy_email(auth)
"#{auth.uid}-#{auth.provider}@example.com"
end
end
routes追加
config/routes.rb にusersを追加する。
resources :users
users_controller追加
app/controllers/users_controller.rb を新規に作る。
class UsersController < ApplicationController def show @user = User.find(params[:id]) end end
View追加
app/views/users/show.html.erb を新規に作る。
<%= @user.name %><br/> <%= @user.description %><br/> <%= @user.location %><br/> <%= @user.website %><br/> <%= @user.image %><br/> <%= @user.twitter %><br/>
確認する
以下にアクセスする。
http://localhost:3000/users/sign_up
Sign in with Twitterのリンクをクリックするとツイッター認証後、rootに飛んでしまいますが、プロフィール画面につなげるとTwitterから取得した情報が表示できます。

deviceのリダイレクト先を変更する
こちらはまた今度対応します。