ruby-on-rails – 设计skip_confirmation!不工作

我的应用程序设置为,如果用户使用Oauth或Openid登录,则无需确认其电子邮件地址.但是,Devise仍在发送电子邮件确认.当我打电话给User.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

感谢任何帮助.

解决方法

您需要在创建用户对象之前跳过确认,并将其持久化到数据库.所以您的方法的用户创建部分将是这样的
user = User.new(:username => data.name,20])
user.skip_confirmation!
user.save

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...