2012-04-19 27 views
18

Tôi đang sử dụng đưa ra 2.0 và đá quý omniauth-twitterBỏ qua xác thực email cho omniauth-twitter trên devise 2.0

Vấn đề là twitter không gửi một email để đáp ứng, vì vậy người sử dụng mô hình ứng dụng của tôi xác nhận rằng có một email và tôi nhận được lỗi sau trong callback:

Email can't be blank 

tôi có điều này trong user.rb tôi mô hình:

#config omniauth twitter 
def self.find_for_twitter_oauth(access_token, signed_in_resource = nil) 
    data = access_token.extra.raw_info 
    if user = User.where(:username => data.screen_name).first 
     user 
    else 
     User.create!(:username => data.screen_name, :password => Devise.friendly_token) 
    end 
end 

và tôi có điều này trong tôi omniauth_callbacks_controller.rb

def twitter 
    @user = User.find_for_twitter_oauth(request.env["omniauth.auth"], current_user) 
    if @user.persisted? 
     flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Twitter" 
     sign_in_and_redirect @user, :event => :authentication 
    else 
     # http://stackoverflow.com/questions/7117200/devise-for-twitter-cookie-overflow-error 
     session["devise.twitter_data"] = request.env["omniauth.auth"].except('extra') 
     redirect_to new_user_registration_url 
    end 
    end 

Tôi muốn lực lượng cho người sử dụng để cung cấp cho một địa chỉ email để gửi bản tin, advertirser ... vv

Làm thế nào tôi có thể khắc phục vấn đề này?

Cảm ơn bạn!

Trả lời

0

Bạn cần xóa xác thực hiện diện của trường email. Theo dõi this post và xem điều đó có hiệu quả không. Xin lỗi vì phản hồi muộn, hy vọng điều này sẽ hữu ích.

+3

Cảm ơn jacobaweiss, nhưng tôi cần nhận được email từ người dùng. Tôi không thể lưu trong cơ sở dữ liệu của tôi một người dùng mà không có email của mình: (Có lẽ tôi cần tạo một chuyển hướng và hiển thị một hình thức và người dùng phải viết email để tạo tài khoản của mình. Làm thế nào tôi có thể làm điều đó? Cảm ơn bạn – hyperrjas

+0

Tôi nghĩ rằng bạn cần phải buộc người dùng vào một số biểu mẫu để điền thông tin, nhưng tôi đang tìm cách thực hiện điều đó:/ – CanCeylan

2

Tôi đang đối mặt với cùng một vấn đề, Twitter không cung cấp cho bạn email qua oauth, bạn phải suy nghĩ theo một cách khác để nhận email. Giải pháp duy nhất mà tôi đã tìm ra là ghi đè cuộc gọi lại và sử dụng dữ liệu twitter để tự động điền biểu mẫu và cung cấp cho người dùng cơ hội hoàn thành thư của mình và sau đó đăng ký và lưu người dùng vào cơ sở dữ liệu.

Nhìn những câu dưới đây:

Is there a way to get an user's email ID after verifying his/her Twitter identity using OAuth?

29

Thêm phần này vào mô hình tài khoản của bạn:

def email_required? 
    super && provider.blank? 
end 

Bạn có thể sử dụng một phương pháp tương đương cho các mật khẩu:

def password_required? 
    super && provider.blank? 
end 

này nên ghi đè các yêu cầu của trường khi sử dụng Omniauth provi ders.

+0

Vấn đề tương tự ở đây, đã chèn mã của bạn vào user.rb của tôi nhưng tôi nhận được lỗi sau: undefined local variable hoặc phương thức 'provider 'cho # .phương pháp nhà cung cấp không được định nghĩa ở bất kỳ đâu trong user.rb? –

+0

@TonyP Bạn có thuộc tính 'provider' trên Mô hình người dùng của mình không? – zykadelic

+0

Bạn có thể thêm một chút giải thích về những gì nó làm không? Nếu có quy tắc xác thực bằng văn bản bằng tay trong user.rb cho mật khẩu và email, nó có hoạt động không? Đối với tôi không :( – Gediminas

2

Một giải pháp được giải thích triệt để ở đây: http://asciicasts.com/episodes/236-omniauth-part-2

Và trên GitHub: https://github.com/fertapric/rails3-mongoid-devise-omniauth/wiki/How-To:-Retrieve-email-information-(middle-step)-from-providers-like-Twitter-or-LinkedIn

Đối với một số lý do, câu hỏi này xuất hiện cao hơn trong hàng ngũ của Google so với những liên kết này, vì vậy tôi nghĩ rằng tôi muốn thêm họ đến câu trả lời.

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