Twitter/FB の Omniauth ログインをセットアップしようとしています。ユーザーの作成時にパスワードと電子メールを検証する独自の認証システムを作成しました。ただし、ユーザーが Twitter/Fb からログインするときに、パスワードや電子メールを検証したくありません。
omniauth_login というユーザー属性を作成しました。should_validate_password で検証が必要かどうかをテストするブール値として使用していますか? 方法。
ユーザー.rb
attr_accessor :password, :updating_password, :omniauth_login
validates_presence_of :password, :if => :should_validate_password?
validates_confirmation_of :password, :if => :should_validate_password?
def should_validate_password?
(updating_password || new_record?) && !(self.omniauth_login == 'true')
end
def self.create_with_omniauth(auth)
create! do |user|
user.provider = auth["provider"]
user.uid = auth["uid"]
user.name = auth["info"]["name"]
end
end
ユーザーの作成に使用したコントローラーは次のとおりです。
sessions_controller.rb
def omniauth_create
auth = request.env["omniauth.auth"]
user = User.new
user.omniauth_login = 'true'
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
Twitter 経由でログインして新しいユーザーを作成しようとすると、まだ検証エラーが発生します。
Validation failed: Password can't be blank, Email can't be blank, Email is not valid.
オブジェクトが create_with_omniauth メソッドで作成されている場合、パスワードと電子メールの検証をスキップするにはどうすればよいですか?
ありがとう。