2011-12-29 9 views
10

Mi aplicación está configurada de modo que si un usuario inicia sesión con Oauth u Openid, no es necesario que confirme su dirección de correo electrónico. Sin embargo, Devise todavía está enviando confirmaciones por correo electrónico. ¡Cuando llamo a User.skip_confirmation! Obtengo un error de método indefinido. Mi modelo:Diseñar skip_confirmation! no funciona

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 

mi controlador:

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 

gracias por cualquier ayuda.

+0

Puesto que ya está usando: confirmable se realmente no necesita el mensaje 'skip_confirmation!' (http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Confirmable#skip_confirmation%21-instance_method) ¿Podría publicar el stack-trace? Dudo que sea el método 'skip_confirmation!' Que falta. – Tigraine

Respuesta

35

Debe omitir la confirmación antes de crear los objetos de usuario y su persistencia en la base de datos. Así que la parte de creación de usuarios de su método se vería

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

Eso funcionó después de que cambié user.save to user.create. Gracias. –

+0

Creo que también necesita agregar 'usuario' como la última línea, así que seguirá siendo el valor de retorno de la función – kambi

+0

Hola Rishav, tengo exactamente el mismo código en user.rb, aún así mi aplicación envía los correos electrónicos de confirmación cuando autorízala en Facebook. ¡Alguna idea de por qué user.skip_confirmation! no está haciendo nada? –

7

Si va a actualizar un registro de usuario, asegúrese de usar skip_reconfirmation! (la mente la re)