我希望其他人能够很好地解决这个问题。我们让用户使用Facebook注册(通过喜欢应用程序),同时他们以我们网站上的用户身份进入我们的数据库。
成功注册后,似乎Devise / OmniAuth正在创建一个随机密码(?)。我如何让用户编辑他们的个人资料,默认情况下(并且应该)在Devise中要求他们输入他们当前的密码?
答案 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