2012-02-02 34 views
12

Tôi hy vọng rằng ai đó có một giải pháp tốt cho vấn đề này. Chúng tôi cho phép người dùng đăng ký sử dụng facebook (bằng cách thích ứng dụng) và đồng thời họ nhập cơ sở dữ liệu của chúng tôi là người dùng trên trang web của chúng tôi.Devise, OmniAuth & Facebook - Làm cách nào để cho phép người dùng chỉnh sửa mật khẩu?

Sau khi đăng ký thành công, có vẻ như Devise/OmniAuth đang tạo mật khẩu ngẫu nhiên (?). Làm thế nào tôi có thể cho phép người dùng chỉnh sửa hồ sơ của họ, cái nào (và nên) theo mặc định trong Devise yêu cầu họ nhập mật khẩu hiện tại của họ?

Trả lời

8

Tôi có cùng một vấn đề chính xác nên tôi hy vọng giải pháp của tôi sẽ hữu ích.

Dựa tắt các chi tiết trong câu hỏi của bạn tôi giả sử bạn sau đây hướng dẫn OmniAuth trong wiki devise: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

Trong phương pháp sau đây:

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 

Tôi đã thay đổi logic trong các khối khác vì nó đã tạo ra một người dùng mới trong cơ sở dữ liệu ngay lập tức và băm một mật khẩu cho họ:

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

Thay vào đó tôi chỉ cần thực hiện một người dùng mới nên t mũ sau khi nhận được thông tin facebook tôi trực tiếp họ đến trang đăng ký, nơi tôi có thông tin của họ dân cư trong các lĩnh vực hình thức mà họ có thể chỉnh sửa và tạo một mật khẩu.

Bạn chỉ cần sẽ cần phải đảm bảo cập nhật của bạn

def self.new_with_session(params, session) 

thêm tất cả các thông tin facebook có liên quan mà bạn đã lấy cho một người dùng mới và gán nó vào đối tượng người dùng mới vì vậy tất cả những lĩnh vực được dân cư với họ thông tin trong trang đăng ký. Vì vậy, sau khi họ nhập xong mật khẩu của họ và thêm hoặc thay đổi bất kỳ thông tin nào và hãy nhấp vào gửi nó tạo người dùng mới. Hy vọng rằng bạn thấy điều này hữu ích.

Đây là một mash của các ý tưởng cho trang wiki về lập mưu và hướng dẫn omniauth railscast: http://railscasts.com/episodes/235-omniauth-part-1

+0

Tôi cho rằng đó là một giải pháp tốt. Nó sẽ rất hữu ích cho tôi để cho phép người dùng được tạo ra ngay lập tức khi họ kết nối thông qua facebook mặc dù. Tôi đoán tôi có thể có một lĩnh vực boolean như "hascreatedownpassword" mặc dù. Cảm ơn ý tưởng. –

Các vấn đề liên quan