设计skip_confirmation !未能避免发送确认指令



我的应用设置是这样的,如果用户使用Oauth或Openid登录,他们不必确认他们的电子邮件地址。然而,设计仍在发送电子邮件确认。当我调用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 =用户。新建:username => data.name,:email => data.name。email,:password => design .friendly_token[0,20])user.skip_confirmation !user.save

如果您正在更新用户记录,请确保使用skip_reconfirmation!(注意re)

最新更新