mixi OpenID が 2016/1/25 に終了するため、これをログイン認証で使用しているサービスは mixi Graph API に移行する必要があります。
以下、Rails + OmniAuth (omniauth-openid) + Devise という前提で、移行する手順を書いていきます。
Gemfile
まず、OmniAuth 用に omniauth-mixi という便利な gem があるので、これを使います。
ただ、本家の gem だと、今回の移行に必要な server_state
パラメータの処理が行われていません (2015/10/9 現在)。ですので、修正したものを使います。
gem 'omniauth-mixi', github: 'milk1000cc/omniauth-mixi', branch: 'support-server-state'
omniauth-openid gem は使わなくなるので、他に OpenID の認証を行っていなければ削除しても大丈夫です。
config/initializers/devise.rb
config.omniauth(:mixi,
ENV['MIXI_CONSUMER_KEY'], ENV['MIXI_CONSUMER_SECRET'],
scope: 'openid openid2 r_profile')
移行の際、mixi OpenID のユーザ ID が必要なので、scope に openid opendid2
を指定します。(参考)
ConsumerKey の取得は、以下のページなどが参考になります。
http://developer.mixi.co.jp/connect/mixi_graph_api/services/
移行処理
OmniauthCallbacksController
で、認証前に以下のようなメソッドを呼べば、mixi OpenID で登録されていたユーザの uid を更新することができます。
def migrate_old_mixi_uid
auth = request.env['omniauth.auth']
old_uid = JWT.decode(auth.credentials.id_token, nil, false)[0]['openid2_id']
if user = User.find_by(provider: auth.provider, uid: old_uid)
user.update! uid: auth.uid
end
end
認証処理自体は、変更する必要がありません。