【问题标题】:Devise, OmniAuth & Facebook - How to let user edit password?Devise, OmniAuth & Facebook - 如何让用户编辑密码?
【发布时间】:2012-02-02 09:07:38
【问题描述】:

我希望其他人对此问题有很好的解决方案。我们让我们的用户使用 facebook 注册(通过喜欢一个应用程序),同时他们作为我们网站上的用户进入我们的数据库。

成功注册后,似乎 Devise/OmniAuth 正在创建一个随机密码(?)。我如何让用户编辑他们的个人资料,在 Devise 中默认情况下(并且应该)要求他们输入当前密码?

【问题讨论】:

    标签: ruby-on-rails facebook devise omniauth


    【解决方案1】:

    我遇到了完全相同的问题,所以我希望我的解决方案会有所帮助。

    根据您问题中的详细信息,我假设您遵循设计 wiki 中的 OmniAuth 指南:https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

    在以下方法中:

    def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
      data = access_token.extra.raw_info
      if user = User.where(:email => data.email).first
        user
      else # Create a user with a stub password. 
        User.create!(:email => data.email, :password => Devise.friendly_token[0,20]) 
      end
    end
    

    我更改了 else 块中的逻辑,因为它立即在数据库中创建一个新用户并为他们散列密码:

    else # Create new user 
          user =User.new
          user
    end
    

    相反,我只是创建了一个新用户,以便在获取 facebook 信息后将他们引导到注册页面,我将他们的信息填充在表单字段中,他们可以在其中编辑和创建密码。

    您只需要确保更新您的

    def self.new_with_session(params, session)
    

    添加您为新用户获取的所有相关 facebook 信息并将其分配给新用户对象,以便在注册页面中使用他们的信息填充所有这些字段。因此,在他们完成输入密码并添加或更改任何信息并单击提交后,创建新用户。希望这对您有所帮助。

    这是关于 Devise 的 wiki 页面和 railscast omniauth 教程的各种想法:http://railscasts.com/episodes/235-omniauth-part-1

    【讨论】:

    • 我想这是一个很好的解决方案。不过,让用户在通过 facebook 连接时立即创建对我来说非常有帮助。我想我可以有一个像“hascreatedownpassword”这样的布尔字段。谢谢你的想法。
    【解决方案2】:

    有一个类似的问题,但在没有密码确认的情况下更新用户配置文件。发布指向它的链接 - 希望对您有所帮助:

    stackoverflow - Allowing users to edit accounts without saving passwords in devise

    【讨论】:

      猜你喜欢
      • 2012-11-06
      • 2014-08-19
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      相关资源
      最近更新 更多