简单的OmniAuth-Twitter因验证而无法创建新用户

时间:2012-05-23 21:18:40

标签: ruby-on-rails ruby-on-rails-3 omniauth twitter-oauth

我正在松散地关注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

我已将回调网址设置为http://127.0.0.1:3000/auth/twitter/callback,但我仍然收到该消息。我在localhost上测试。

我在Hartl的railstutorial http://ruby.railstutorial.org/ruby-on-rails-tutorial-book之后为我的用户建模,我的网站项目要求用户填写这些字段。

与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],但这不起作用。

感谢。

1 个答案:

答案 0 :(得分:1)

有两种方法可以跳过验证。你可以通过将:validate => false传递给create方法(通常是一个坏主意)来跳过它们,或者你可以将你的验证修改为如下所示:

user.rb

validates_confirmation_of :password, :if => :password_required?

def password_required?
  !provider.blank? && super
end