2011-07-10 21 views
8

के लिए डेविस ओमनीथ "एन्क्रिप्टेड_पासवर्ड न्यूल नहीं हो सकता है" मैं फेसबुक के साथ अपने ऐप में साइन इन करने के लिए ओमनीथ के साथ डेविस का उपयोग कर रहा हूं। मैंने इसे चलाने और चलाने के लिए रेलस्कास्ट ट्यूटोरियल का उपयोग किया।नए उपयोगकर्ता

यदि कोई उपयोगकर्ता पहले से ही फेसबुक के माध्यम से प्रमाणीकरण करने वाली मेरी साइट का सदस्य है तो ठीक काम करता है। फेसबुक के साथ एक नए उपयोगकर्ता को प्रमाणित करते समय समस्या आती है। जब यह मेरे उपयोगकर्ता मॉडल के लिए एक नया उपयोगकर्ता बनाने के लिए जाता है तो मुझे "users.encrypted_password न्यूल नहीं हो सकता" त्रुटि मिलती है। मैं यह नहीं समझ सकता कि फेसबुक जानकारी से उपयोगकर्ता मॉडल में पासवर्ड कैसे पारित किया जाए। , अग्रिम धन्यवाद

authentations_controller.rb

class AuthenticationsController < ApplicationController 
def index 
    @authentications = current_user.authentications if current_user 
end 

def create 
    omniauth = request.env["omniauth.auth"] 
    authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid']) 
if authentication 
    flash[:notice] = "Signed in successfully." 
    sign_in_and_redirect(:user, authentication.user) 
elsif current_user 
    current_user.authentications.create!(:provider => omniauth['provider'], :uid => omniauth['uid']) 
    flash[:notice] = "Authentication successful." 
    redirect_to authentications_url 
else 
    user = User.new 
    user.apply_omniauth(omniauth) 
    if user.save 
    flash[:notice] = "Signed in successfully." 
    sign_in_and_redirect(:user, user) 
    else 
    session[:omniauth] = omniauth.except('extra') 
    redirect_to new_user_registration_url 
    end 
    end 
end 

user.rb

def apply_omniauth(omniauth) 
    self.email = omniauth['user_info']['email'] if email.blank? 
    authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid']) 
end 


def password_required? 
    (authentications.empty? || !password.blank?) && super 
end 

किसी भी मदद की बहुत अच्छा होगा:

यह है कि मैं क्या है!

उत्तर

13

जोड़ें: पासवर्ड => Devise.friendly_token [0,20] फेसबुक omniauth से नया उपयोगकर्ता बनाते समय।

मेरा मानना ​​है कि डेविस उपयोगकर्ता बनाने के लिए पासवर्ड फ़ील्ड में कुछ की उम्मीद कर रहा है। चूंकि फेसबुक ओथ (कम से कम आपके ऐप पक्ष पर नहीं) करते समय कोई पासवर्ड नहीं है, इसलिए आपको उपरोक्त शो के रूप में एक डमी पासवर्ड बनाना होगा।

अधिक जानकारी के लिए देखें: https://github.com/plataformatec/devise/wiki/OmniAuth:-Overview

+1

धन्यवाद एक बहुत है, मैं पहले लेकिन जाहिरा तौर पर गलत तरीके से इस लागू करने के लिए कोशिश की थी। सब ठीक काम कर रहे हैं। उम्मीद है कि लिंक किसी और की मदद कर सकता है। – looloobs

+0

इससे मुझे google_oauth2 –

+1

के साथ भी मदद मिली और क्या उपयोगकर्ता जान सकता है कि पासवर्ड क्या है? –

संबंधित मुद्दे