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

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

ただいまの
回答率

90.52%

  • Ruby

    7633questions

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

  • Ruby on Rails 5

    1737questions

  • Twitter

    659questions

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

  • Authentication

    86questions

    Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

omniauth-twitterにてauth["extra"]以下の情報を取得したい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 138

ToruOkada

score 10

いつもお世話になっております。

omniauth-twitterとdeviseを使用しTwitterを活用した認証を実装しているのですが、下記の例のhashにてextra以下の情報が取得できず困っております。(credentialまでしか返ってきません)

{
  :provider => "twitter",
  :uid => "123456",
  :info => {
    :nickname => "johnqpublic",
    :name => "John Q Public",
    :location => "Anytown, USA",
    :image => "http://si0.twimg.com/sticky/default_profile_images/default_profile_2_normal.png",
    :description => "a very normal guy.",
    :urls => {
      :Website => nil,
      :Twitter => "https://twitter.com/johnqpublic"
    }
  },
  :credentials => {
    :token => "a1b2c3d4...", # The OAuth 2.0 access token
    :secret => "abcdef1234"
  },
  :extra => {
    :access_token => "", # An OAuth::AccessToken object
    :raw_info => {
      :name => "John Q Public",
      :listed_count => 0,
      :profile_sidebar_border_color => "181A1E",
      :url => nil,
      :lang => "en",
      :statuses_count => 129,
      :profile_image_url => "http://si0.twimg.com/sticky/default_profile_images/default_profile_2_normal.png",
      :profile_background_image_url_https => "https://twimg0-a.akamaihd.net/profile_background_images/229171796/pattern_036.gif",
      :location => "Anytown, USA",
      :time_zone => "Chicago",
      :follow_request_sent => false,
      :id => 123456,
      :profile_background_tile => true,
      :profile_sidebar_fill_color => "666666",
      :followers_count => 1,
      :default_profile_image => false,
      :screen_name => "",
      :following => false,
      :utc_offset => -3600,
      :verified => false,
      :favourites_count => 0,
      :profile_background_color => "1A1B1F",
      :is_translator => false,
      :friends_count => 1,
      :notifications => false,
      :geo_enabled => true,
      :profile_background_image_url => "http://twimg0-a.akamaihd.net/profile_background_images/229171796/pattern_036.gif",
      :protected => false,
      :description => "a very normal guy.",
      :profile_link_color => "2FC2EF",
      :created_at => "Thu Jul 4 00:00:00 +0000 2013",
      :id_str => "123456",
      :profile_image_url_https => "https://si0.twimg.com/sticky/default_profile_images/default_profile_2_normal.png",
      :default_profile => false,
      :profile_use_background_image => false,
      :entities => {
        :description => {
          :urls => []
        }
      },
      :profile_text_color => "666666",
      :contributors_enabled => false
    }
  }
}

発生しているエラーは下記です。
イメージ説明

extra以下を取得するにはどのようにすればよろしいのでしょうか?
下記がコードです。

app/models/user.rb

class User < ApplicationRecord
    # userが存在しなければ、新規で登録する
    unless user
      ActiveRecord::Base.transaction do
        user = User.register_user(auth)
        # 一旦twitterだけで登録できるように実装
        user.sns_providers.create(
          type:          auth["provider"],
          follower:      auth["extra"]["raw_info"]["followers_count"],
          account_name:  auth["info"]["nickname"],
          link:          auth["info"]["urls"]["Twitter"]        
        )
      end
    end

    user
  end

  # userテーブルに登録
  def self.register_user(auth)
    user = User.create(
      name:      auth["info"]["name"],
      email:     User.dummy_email(auth),
      password:  Devise.friendly_token[0, 20],
      # デフォルト値を代入する
      genre_id:  "0",
      telephone: "000-0000-0000"
      )
  end
end

app/controllers/omniauth_callbacks_controller.rb

module Users
  class OmniauthCallbacksController < DeviseTokenAuth::OmniauthCallbacksController
    include Devise::Controllers::Rememberable

    def omniauth_success
      get_resource_from_auth_hash
      # create_token_info
      set_token_on_resource
      create_auth_params

      sign_in(:user, @resource, store: false, bypass: false)

      if @resource.save!
        # update_token_authをつけることでレスポンスヘッダーに認証情報を付与できる。
        update_auth_header
        yield @resource if block_given?
        render json: @resource, status: :ok
      else
          render json: { message: "failed to login" }, status: 500
      end
    end

    protected
    def get_resource_from_auth_hash
      # find or create user by provider and nickname   
      @user = User.find_for_oauth(auth_hash)

      #  userが新規登録か調べる
      if @user.new_record?
        @oauth_registration = true
      end

      # assign any additional (whitelisted) attributes
      extra_params = whitelisted_params
      @user.assign_attributes(extra_params) if extra_params

      @user
    end
  end
end

どなたかご教示いただけますと嬉しいです。
よろしくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    7633questions

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

  • Ruby on Rails 5

    1737questions

  • Twitter

    659questions

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

  • Authentication

    86questions

    Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。