设计,OmniAuth& Facebook - 如何让用户编辑密码?

时间:2012-02-02 09:07:38

标签: ruby-on-rails facebook devise omniauth

我希望其他人能够很好地解决这个问题。我们让用户使用Facebook注册(通过喜欢应用程序),同时他们以我们网站上的用户身份进入我们的数据库。

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

2 个答案:

答案 0 :(得分:9)

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

根据您问题中的详细信息,我假设您遵循设计维基中的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

答案 1 :(得分:1)

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

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