【问题标题】:Simple OmniAuth-Twitter failing to create new user because of validation简单的 OmniAuth-Twitter 由于验证而无法创建新用户
【发布时间】:2012-05-23 21:18:40
【问题描述】:

我正在松散地关注 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 为我的用户建模,我的网站项目要求用户填写这些字段。

与 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

用户.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],但没有成功。

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    用户.rb

    validates_confirmation_of :password, :if => :password_required?
    
    def password_required?
      !provider.blank? && super
    end
    

    【讨论】:

    • 姓名和电子邮件似乎也未能通过验证。如果我按照你的方法,这是否意味着我必须再编写 2 个方法来测试是否需要姓名和电子邮件?
    • 是的,这是正确的,您可以以与上述类似的方式再创建两个方法。您可能希望确保这确实是您想要的 - 没有姓名和电子邮件确实限制了您可以构建的涉及用户数据的功能。
    • 这是我第一次从外部来源获取数据。有没有办法让我将我的姓名字段分配给用户的 Twitter 名称,将我的电子邮件字段分配给用户的 Twitter 电子邮件?
    • 请记住,尽管不同的服务提供不同的信息。例如,IIRC twitter API 提供一个名称字段(而不是名字和姓氏)并且不提供电子邮件。
    • 还有一条建议:不要使用 localhost 或 127.0.0.1 作为回调 url,因为大多数 oauth 提供者不会路由到该 URL。相反,使用 lvh.me - 它总是转到 localhost(它被分配给 127.0.0.1 的 IP)。
    猜你喜欢
    • 1970-01-01
    • 2015-03-23
    • 2015-05-26
    • 1970-01-01
    • 2023-04-01
    • 2020-06-22
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    相关资源
    最近更新 更多