我正在尝试为 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
这是我用于创建用户的控制器:
session_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 方法中创建的,如何跳过密码和电子邮件的验证?
谢谢。