4

ID プロバイダーを使用して、アプリケーションに個別の管理者ログインを使用したいと考えています。

これを config/initializers/omniauth.rb に書きました

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :identity, :model => Credential, :on_failed_registration =>SessionsController.action(:register)
  provider :identity, :model => Credential, :name => 'admin', :on_failed_registration =>      SessionsController.action(:login_admin)
  provider :google_oauth2, '000000000.apps.googleusercontent.com', '00000000000'
end

config/routes.rb 内

 match '/auth/admin/callback', :to => 'sessions#authenticate_admin'

app/controllers/sessions_controller.rb 内

def authenticate_admin
  auth_hash = request.env['omniauth.auth']
  session[:admin_user] = auth_hash['user_info']['email']
  if admin?
    redirect_to '/'
  else
    render :text => '401 Unauthorized', :status => 401
  end
end

しかし、request.env['omniauth.auth'] にアクセスしようとすると、常に nil になります。sessison#create アクションで、通常のユーザー向けのデフォルトのコールバックを使用するとアクセスできます。このコードで見逃されているものがあるかどうかを知りたいだけです。このブログhttp://www.intridea.com/blog/2011/1/31/easy-rails-admin-login-with-google-apps-and-omniauthをフォローしています。

4

0 に答える 0