设计skip_confirmation!不工作

时间:2011-12-29 19:02:15

标签: ruby-on-rails ruby ruby-on-rails-3.1 devise

我的应用已设置好,如果用户使用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

感谢您的帮助。

2 个答案:

答案 0 :(得分:36)

在创建User对象并将其持久保存到数据库之前,您需要跳过确认。因此,方法的用户创建部分看起来像

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

答案 1 :(得分:9)

如果您要更新用户记录,请务必使用skip_reconfirmation!(请注意重新