Devise,OmniAuth和Facebook - 如何让用户编辑密码?

Emi*_*äck 12 facebook ruby-on-rails devise omniauth

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

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

小智 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
Run Code Online (Sandbox Code Playgroud)

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

else # Create new user 
      user =User.new
      user
end
Run Code Online (Sandbox Code Playgroud)

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

您只需要确保更新您的

def self.new_with_session(params, session)
Run Code Online (Sandbox Code Playgroud)

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

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