RailsアプリにOAuth2認証を実装する(Google+編)

qiita.com

概ねこちらの内容でokだった。ただし、以下の点で変更か何かがあったようで注意。

  • user_omniauth_authorize_path(:google) が user_google_omniauth_authorize_path に変更されている模様
  • User.create()の引数に email: を渡さないといけない
  • User.create()の引数 name: に auth.info.name を渡しているが info が nil で届いてきてエラーになるので、name: は無指定にしてみた

あと、同じくUser.create()の引数 meta: にそのままyamlを渡すと、MySQLだとVARCHAR(255)で定義されているため長さオーバーでエラーが起きる。そのためmigrationの実施で

      t.string :users, :provider
      t.string :users, :uid
      t.string :users, :token
      t.string :users, :meta # ←ここを

としている箇所のt.stringを

      t.text :users, :meta # ←こうする

のようにして文字列長制限を緩めるか、metaの内容を削るかしたほうが良さそう。(とりあえず私はmetaを空にした)

それと、Google Appsを使用している社内向けログイン機能にするなどの場合、特定のドメインからのみのログインとするようにしたいこともある。そんな時は config/initializers/devise.rb の記述を一箇所このように追記すると良い。

  config.omniauth :google_oauth2,
                  ENV['GOOGLE_APP_ID'], ENV['GOOGLE_APP_SECRET'],
                  name: :google, scope: %w(email), hd: 'example.com'

blog.hello-world.jp.net
blog.bitjourney.com