2011-12-29 11 views
10

Moja aplikacja jest tak skonfigurowana, że ​​jeśli użytkownik zaloguje się w Oauth lub Openid, nie musi potwierdzać swojego adresu e-mail. Jednak Devise wciąż wysyła potwierdzenia e-mail. Kiedy wołam User.skip_confirmation! Otrzymuję niezdefiniowany błąd metody. Mój model:Wymyśl konfigurację skip_confirmation! nie działa

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 

mój Kontroler:

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 

dzięki za wszelką pomoc.

+0

Skoro już używasz: ty POTWIERDZALNE tak naprawdę nie potrzebujesz komunikatu 'skip_confirmation!' (http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Confirmable#skip_confirmation%21-instance_method) . Czy mógłbyś opublikować ślad stosu? Wątpię, że brakuje metody "skip_confirmation!". – Tigraine

Odpowiedz

35

Należy pominąć potwierdzenie przed utworzeniem obiektów użytkownika i ich utrwaleniem w bazie danych. Więc część stworzenie użytkownik metodę wyglądałby

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

To działało po zmianie user.save na user.create. Dzięki. –

+0

Myślę, że musisz również dodać "użytkownika" jako ostatnią linię, więc pozostanie to wartość zwracana funkcji – kambi

+0

Cześć Rishav, mam dokładnie taki sam kod w user.rb, wciąż moja aplikacja wysyła e-maile potwierdzające, kiedy autoryzuj go na Facebooku. Każdy pomysł, dlaczego user.skip_confirmation! nic nie robi? –

7

Jeśli aktualizujesz rekord użytkownika, należy użyć skip_reconfirmation! (przeszkadza re)

Powiązane problemy