mixiへの認証を行ってくれる「OmniAuth-mixi」を作ってみました

Ruby on RailsやSinatraで作るWebアプリケーションに各種認証機能を手軽に追加できる機構として、「 OmniAuthシリーズ」があります。これのmixi版を作ってみました。

OmniAuth-mixi - Github

OmniAuthは、Strategyという形式で任意の認証プロバイダの実装を追加できるようになっています。OmniAuth-mixiを使うことで、OAuth2にてmixi Graph APIの認証認可を行い、People APIで認可ユーザのプロフィール情報を取得する、という処理を行ってくれます。

使い方は簡単です。Ruby on Railsの場合、まずGemfileに以下を追記します。

gem 'omniauth-mixi', git => 'https://github.com/yoichiro/omniauth-mixi.git'

次に、config/initializers/omniauth.rbファイルに以下を追記します。

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :mixi, 'consumer_key', 'consumer_secret'
end

consumer_key、consumer_secretは、もちろんそれぞれmixiから発行されたもので置き換えます。準備はこれで完了です。簡単ですね!

実際のアプリケーション内でmixiのユーザ認証したくなった時には、mixi Graph APIの認証認可画面にリダイレクトさせます。と言っても、直接mixiの画面に飛ばすわけではなく、OmniAuth-mixiが提供してくれているリダイレクト先「/auth/mixi」に飛ばします。

redirect '/auth/mixi'

mixiの認証認可画面から戻ってくるときには、「/auth/mixi/callback」が呼び出されるようにしておきます。具体的には、mixiへのサービス登録時に、redirect_uriとしてこのパスが呼び出されるように登録しておきます。具体的なコントローラにマッピングするために、routes.rbファイルに以下を記述します。

match '/auth/mixi/callback', to: 'sessions#create'

コントローラの中から、「request.env[‘omniauth.auth’]」とアクセスすることで、認証結果を得ることができます。例えばsessions#createに対応するコントローラとして、以下のようなコードになるでしょう。

class SessionsController < ApplicationController
  def create
    auth_hash = request.env['omniauth.auth']
    user_id = auth_hash['uid']
    nickname = auth_hash['user_info']['nickname']
    image_url = auth_hash['user_info']['image']
    # do something...
  end
end

上記のコードはmixiに特化していますが、:providerやauth_hash[‘provider’]を使うことで、mixiだけでなく他の認証プロバイダにも対応することができるようになるでしょう。

今後、rubygemsへの正式登録や、 omniauth.orgへの掲載を目指していきたいと思ってます。

ぜひお試しください。

このエントリーをはてなブックマークに追加

関連記事

2023年のRemap

Remapにファームウェアビルド機能を追加しました

Google I/O 2023でのウェブ関連のトピック

2022年を振り返って

現在のRemapと今後のRemapについて