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

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

ただいまの
回答率

90.53%

  • Ruby on Rails

    8644questions

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

  • Ruby on Rails 4

    2535questions

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

  • OAuth

    123questions

    OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Railsの特定のアクションでセッション情報が取得できない

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 729

benzo

score 25

RailsでmixiのOAuth認証を行おうとしているのですが、セッションが取得できなくて困ってます。

  def oauth_mixi
    # server_stateの入手
    consumer_key = "XXXXXXXXXXXXXXXXXXXXX"
    query = "grant_type=server_state&client_id=" + consumer_key

    consumer = OAuth::Consumer.new( "", "", { :site => "https://secure.mixi-platform.com" } )
    response = consumer.request( :post, '/2/token', nil, {}, query, { 'Content-Type' => 'application/x-www-form-urlencoded' })

    server_state = JSON.parse( response.body )['server_state']

    # 認可とAuthorization Codeの入手
    url = "https://mixi.jp/connect_authorize.pl"
    url += "?client_id=" + consumer_key
    url += "&response_type=code"
    url += "&scope=r_profile+r_updates"
    url += "+r_voice+w_voice"                 # voice
    url += "&server_state=" + server_state

    # sessionにserver_stateを保存
    session[:_server_state] = server_state

    puts "request.session_options[:id] = " + request.session_options[:id].to_s
    puts "session[:_server_state] = " + session[:_server_state].to_s

    redirect_to url
    return
  end

  def oauth_callback_mixi
    puts "request.session_options[:id] = " + request.session_options[:id].to_s
    puts "session[:_server_state] = " + session[:_server_state].to_s
  end

これを行うと出力は

Started GET "/oauth_mixi" for ::1 at 2017-02-28 08:57:42 +0900
Processing by MixiController#oauth_mixi as HTML
request.session_options[:id] = ac5bac1a6f0d01cad0302a72029cc9f4
session[:_server_state] = PnrbWgJTJLNZ2rUZjT_CuMFxoR8z04CAxgXjVRlHCBE

Started GET "/oauth_callback_mixi?code=xxxxxxxxxxxxxxxxxxxxxxxx" for 127.0.0.1 at 2017-02-28 08:57:48 +0900
Processing by MixiController#oauth_callback_mixi as HTML
  Parameters: {"code"=>"xxxxxxxxxxxxxxxxxxxxxxxx"}
request.session_options[:id] =
session[:_server_state] =

となり、oauth_callback_mixi内でsessionの値が取得できていません(nilになっています)。

どうやらセッションは維持されてるようなのですが、oauth_callback_mixiアクションでのみセッション情報が取得できません。
memcached&dalliを使用していますが、特定のアクションでのみセッションが取得できないというケースとはどのような事が考えられるのでしょうか?

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

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

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

  • Ruby on Rails

    8644questions

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

  • Ruby on Rails 4

    2535questions

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

  • OAuth

    123questions

    OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。