Rails - 如何为omniauth用户覆盖设计'当前密码'

时间:2017-06-01 13:38:24

标签: ruby-on-rails ruby devise

我之前看过这个,但是找不到适合我的解决方案。

我尝试过关注Devise Wiki,并尝试将其他人建议的代码添加到控制器中: Editing Users With Devise and Omniauth [Rails]update_without_password does't update user info https://github.com/plataformatec/devise/issues/1620

问题是用户通过我们的Twitter Omniauth注册无法更新其帐户信息,因为Devise会提示他们输入“当前密码”进行更改。通过电子邮件向用户发送随机生成的密码不是一种选择。

我想做什么 -

我想覆盖Devise控制器的'update'方法,以便它识别Twitter用户第一次编辑他们的详细信息,并允许他们跳过“当前密码”验证。我们为Twitter用户分配一个标准的电子邮件地址,该地址可以是它检查的变量。他们将无法在不更改的情况下提交。

仍然是问题 -

我在注册控制器中尝试了不同的代码块,但是我仍然被重定向回到from,并显示当前密码不正确的错误。我甚至没有进入binding.pry,所以看起来这个方法甚至没有被读取?

我已经尝试完全删除“当前密码”的表单输入,并使用默认值将其传递给hidden。

谢谢你的帮助!

路线

Rails.application.routes.draw do

  ActiveAdmin.routes(self)
  # devise_for :users,
  devise_for :users, controllers: { registrations: 'registrations' },
  controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }


  scope '(:locale)', locale: /en|ca|es/ do

    resources :politicians

    resources :posts do
      resources :comments, only:[:new, :create, :edit, :update, :destroy]
      member do
        put "like", to: "posts#upvote"
        put "dislike", to: "posts#downvote"
      end
    end

    get "/about" => "pages#about_us"
    root to: 'pages#home'
  end
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

Registrations_Controller.rb

class Users::RegistrationsController < Devise::RegistrationsController

  protected

   def update_resource(resource, params)
    binding.pry
      if current_user.email.include?("email.com")
        params.delete("current_password")
        resource.update_without_password(params)
      else
        resource.update_with_password(params)
      end
    end
end

1 个答案:

答案 0 :(得分:0)

您需要在注册控制器中创建一个与此类似的方法:

{{1}}

Devise提供了一篇非常好的,深入的wiki文章,允许用户在不输入密码Codepen的情况下更新其帐户信息。