0

Railscasts Simple OmniAuth http://railscasts.com/episodes/241-simple-omniauthに従って、Twitter ログインを作成しています。Twitter でサインインして新しいユーザーを作成しようとすると、次のメッセージが表示されます。

Validation failed: Password can't be blank, Name is not valid., Email can't be blank, Email is not valid.

更新ボタンを押すと、次のエラーが表示されます。

OAuth::Unauthorized 401 Unauthorized

既にコールバック URL を に設定していますhttp://127.0.0.1:3000/auth/twitter/callbackが、まだそのメッセージが表示されます。私はローカルホストでテストしています。

Hartl の railstutorial http://ruby.railstutorial.org/ruby-on-rails-tutorial-bookに基づいてユーザーをモデル化し、私の Web サイト プロジェクトでは、ユーザーがこれらのフィールドに入力する必要があります。

Railscast とは異なり、omniauth ログインを処理する新しいメソッドを作成しました。

sessions_controller.rb

def omniauth_create
  auth = request.env["omniauth.auth"]
  user = User.find_by_provider_and_uid(auth["provider"], auth["uid"]) || 
         User.create_with_omniauth(auth)
  session[:user_id] = user.id
  redirect_to user
end

user.rb

def self.create_with_omniauth(auth)
  create! do |user|
    user.provider = auth["provider"]
    user.uid = auth["uid"]
    user.name = auth["info"]["name"]
  end
end

質問: 検証をバイパスするにはどうすればよいですか?

これまで、 を使用してみましskip_before_filter :authenticate, :only => [:omniauth_create]たが、うまくいきませんでした。

ありがとう。

4

1 に答える 1

1

検証をスキップする方法は2つあります。createメソッド(通常は悪いアイデア)に渡すことでそれらをすべてスキップするか:validate => false、検証を次のように変更することができます。

user.rb

validates_confirmation_of :password, :if => :password_required?

def password_required?
  !provider.blank? && super
end
于 2012-05-23T21:31:41.147 に答える