Engineering

Jul 01, 2018

OmniAuthで認証後のコールバックにパラメータを渡す方法

 

FacebookログインやGoogleログインを実装する際によくお世話になるOmniauthですが、Webサービスに採用していると、認証完了後にある特定の処理をしたいということがまあまああります。

そんな時は、認証前のURLに任意のパラメータを渡して、コールバックでそのパラメータを元に処理をわけたいということがありますよね。これができない場合は、sessionに値を保持してやったりするのですが、sessionを乱用すると、一見意味のわからないキーが乱立するので、極力Oauth認証後の処理であればこういった仕組みを利用していきたいです。

 

調べてみたところ,omniauthに任意の値を渡すことが可能のようで、認証先(例えばgoogle)に飛ばす際のURLにパラメータを付与すると認証後にそのパラメータを取得できるようです。

= link_to 'Link' , user_oauth2_omniauth_authorize_path({flg: 1})

として飛ばすと、

def callback
  params = request.env['omniauth.params']
  if params['flg'].present?
    // フラグのある時の処理
  else
    // フラグのない時の処理
  end
end

というように処理をわけることができます。

 

決済の処理など外部に一度リクエストを飛ばして、リダイレクトしてもらう場合にもレスポンスに任意の値が設定できるのでomniauthも似た感じですね。

細かいですが、こういうことを知っておけると無駄な処理を書かなくてすむのでメモしておきます。

関連記事

記事検索

気になるサイト内の記事を検索する

プロフィール

バンクーバー在住のフルスタックエンジニアです。React, Ruby on Rails, Go などでお仕事しています。職場がトロントなので日本、トロント、バンクーバーの三つの時天空を操って生活しています。

プロモーション