2011-12-29 25 views
10

我的應用程序已設置爲如果用戶使用Oauth或Openid登錄,則無需確認其電子郵件地址。但是,Devise仍在發送電子郵件確認。當我打電話User.skip_confirmation!我收到一個未定義的方法錯誤。我的模型:設計skip_confirmation!不起作用

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 

我的控制器:

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 

感謝您的幫助。

+0

既然你已經使用:可確定你真的不需要'skip_confirmation!'消息(http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Confirmable#skip_confirmation%21-instance_method) 您可以發佈堆棧跟蹤嗎?我懷疑這是缺少的'skip_confirmation!'方法。 – Tigraine 2011-12-29 19:12:18

回答

35

在創建User對象及其持久化到數據庫之前,您需要跳過確認。所以,你的方法的用戶創建的部分看起來像

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

在將user.save更改爲user.create後,這起作用。謝謝。 – 2011-12-29 23:02:43

+0

我認爲你還需要添加'用戶'作爲最後一行,所以它將保持函數的返回值 – kambi 2012-02-29 15:24:16

+0

嗨Rishav,我有完全相同的代碼在user.rb中,我的應用程序仍然發出確認電子郵件時,我在Facebook上授權。任何想法爲什麼user.skip_confirmation!沒有做任何事情? – 2013-12-19 12:22:22

7

如果要更新用戶記錄,確保使用skip_reconfirmation!(介意重新