2011-12-29 22 views
10

La mia app è configurata in modo tale che se un utente accede con Oauth o Openid, non è necessario confermare il proprio indirizzo email. Tuttavia, Devise sta ancora inviando conferme email. Quando chiamo User.skip_confirmation! Ottengo un errore del metodo non definito. Il mio modello:Devise skip_confirmation! non funziona

class User < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, :recoverable, :rememberable, 
    :trackable, :validatable, :confirmable, :lockable, :token_authenticatable, :omniauthable 

    attr_accessible :username, :email, :password, :password_confirmation, :remember_me 
    validates_presence_of :username 
    validates_uniqueness_of :username, :case_sensitive => false 

    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 
     #User.skip_confirmation! 
     User.create!(:username => data.name, :email => data.email, :password => Devise.friendly_token[0,20]) 
     end 
    end 
def skip_confirmation! 
    self.confirmed_at = Time.now 
end 
end 

mio controller:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController 
def facebook 
    @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user) 
    @user.skip_confirmation! 
if @user.persisted? 
    sign_in @user 
    @fname = @user.username 
    redirect_to root_path, :flash => { :success => "Welcome #{@fname}!" } 
else 
    session["devise.facebook_data"] = request.env["omniauth.auth"] 
    redirect_to new_user_registration_url 
end 
end 
end 

Grazie per qualsiasi aiuto.

+0

Dal momento che si sta già utilizzando: confirmable voi non ho davvero bisogno del messaggio "skip_confirmation!" (http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Confirmable#skip_confirmation%21-instance_method) Potresti postare lo stack-trace? Dubito che sia il metodo "skip_confirmation!" Che manca. – Tigraine

risposta

35

È necessario saltare la conferma prima di creare gli oggetti Utente e il suo persistere nel database. Così la parte di creazione dell'utente del metodo sarà simile

 
user = User.new(:username => data.name, :email => data.email, :password => Devise.friendly_token[0,20]) 
user.skip_confirmation! 
user.save 
+0

Che ha funzionato dopo aver modificato user.save in user.create. Grazie. –

+0

Penso che sia necessario aggiungere "utente" come ultima riga in modo che rimanga il valore restituito della funzione – kambi

+0

Ciao Rishav, ho esattamente lo stesso codice in user.rb, tuttavia la mia app invia le e-mail di conferma quando autorizzarlo su Facebook. Qualche idea sul perché user.skip_confirmation! non sta facendo nulla? –

7

Se si sta aggiornando un record utente, assicurarsi di utilizzare skip_reconfirmation! (mente il ri)

Problemi correlati