4337


Rails 初心者です。

[コチラ](http://ruby-rails.hatenadiary.com/entry/20140805/1407200400)の記事を参考に
Rails で OAuth による Twitter ログインを実装しています。  
ひと通りの設定が終わり、 Twitter に飛んだ後「連携アプリを認証」ボタンをおして  
サイトに戻ってくるときに、以下のエラーが発生してしまいます。

![エラー画面](https://i.stack.imgur.com/DHL3q.png)

調べてみると、原因としましては、 Rails のコントローラには  
予期しない値を受け入れないようにするための仕組みがあり  
Rails 4.x からは外部から渡ってくるパラメータのホワイトリストの定義方法が変更となり

[code]

    params.require(:hoge).permit(:fuga, :piyo)
    
[/code]

などと記述するようになっているということを理解したのですが  
コントローラで受け取ったパラメータをどのようにして `User.from_omniauth()` メソッドに  
渡せばいいのか分かりません。

コントローラのコードは以下になります。

[code]

    class OmniauthCallbacksController < Devise::OmniauthCallbacksController
      def all
        user = User.from_omniauth(request.env['omniauth.auth'])
        if user.persisted?
          flash.notice = 'welcome!'
          sign_in_and_redirect
        else
          session['devise.user_attributes'] = user.attributes
          redirect_to new_user_registration_url
        end
      end
    
      alias_method :twitter, :all
    end
    
[/code]


CC BY-SA 3.0
2015-01-09T10:07:25.833
4336
2015-03-01T13:34:43.357
2015-01-09T10:14:14.950
4978
5840
question
ruby ruby-on-rails twitter
Rails4 + OmniAuth で、Twitter 経由のアプリ認証エラーが発生する


[ActionController::Parameters](http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-
c-new)

[code]

    ActionController::Parameters.new(request.env['omniauth.auth']).permit!
    
[/code]


CC BY-SA 3.0
2015-01-09T11:09:04.253
4337
2015-01-09T11:09:04.253
2599
4336
answer


User(app/models/user.rb)を修正します。

変更前:

[code]

    class User < ActiveRecord::Base
      ...
      def self.from_omniauth(auth)
        where(auth.slice(:provider, :uid)).first_or_create do |user|
          user.username = auth.info.nickname
          user.email = auth.info.email
        end
      end
    end
    
[/code]

変更後:

[code]

    class User < ActiveRecord::Base
      ...
      def self.from_omniauth(auth)
        where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
          user.username = auth.info.nickname
          user.email = auth.info.email
        end
      end
    end
    
[/code]

参照:  
<https://stackoverflow.com/questions/25399414/rails-4-1-5-omniauth-strong-
parameters>


CC BY-SA 3.0
2015-03-01T13:34:43.357
7280
2015-03-01T13:34:43.357
2017-05-23T12:38:55.307
-1
8622
4336
answer