Ruby on rails 设计跳过确认!未能避免发送确认指示

Ruby on rails 设计跳过确认!未能避免发送确认指示,ruby-on-rails,ruby,ruby-on-rails-3.1,devise,Ruby On Rails,Ruby,Ruby On Rails 3.1,Devise,我的应用程序设置为,如果用户使用Oauth或Openid登录,他们不必确认自己的电子邮件地址。然而,Deave仍在发送电子邮件确认。当我呼叫User.skip\u确认时!我得到一个未定义的方法错误。我的模型: class User < ActiveRecord::Base devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :

我的应用程序设置为,如果用户使用Oauth或Openid登录,他们不必确认自己的电子邮件地址。然而,Deave仍在发送电子邮件确认。当我呼叫User.skip\u确认时!我得到一个未定义的方法错误。我的模型:

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用户false
def self.find_for_facebook_oauth(访问令牌,在资源中签名=nil)
数据=访问\u令牌.extra.raw\u信息
如果user=user.where(:email=>data.email)
用户
其他的
#User.skip\u确认!
User.create!(:username=>data.name,:email=>data.email,:password=>design.friendly_令牌[0,20])
结束
结束
def skip_确认!
自我确认时间=现在
结束
结束
我的控制器:

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
class Users::OmniAuthCallbackController{:success=>“Welcome{@fname}!”
其他的
会话[“designe.facebook_data”]=request.env[“omniauth.auth”]
将\重定向到新\用户\注册\ url
结束
结束
结束

谢谢您的帮助。

在创建用户对象并将其保存到数据库之前,您需要跳过确认。因此,方法的用户创建部分如下所示

user = User.new(:username => data.name, :email => data.email, :password => Devise.friendly_token[0,20]) user.skip_confirmation! user.save user=user.new(:username=>data.name,:email=>data.email,:password=>design.friendly_令牌[0,20]) user.skip\u确认! user.save
如果要更新用户记录,请确保使用
skip\u重新确认
(注意re

因为您已经在使用:confirmable,所以您实际上不需要
跳过确认消息()您可以发布堆栈跟踪吗?我怀疑是
跳过确认缺少的方法。在我将user.save更改为user.create后,该方法起作用。谢谢。我认为你还需要添加“user”作为最后一行,这样它将保持函数的返回值。Hi Rishav,我在user.rb中有完全相同的代码,但我的应用程序在我在Facebook上授权时仍会发送确认电子邮件。知道为什么要用户跳过确认吗!没有做任何事情吗?@Laszloteki-如果不看你的代码就很难提出解决方案。它可能是一些你可能错过的小东西。