简体   繁体   English

设计skip_confirmation! 无法避免发送确认指示

[英]Devise skip_confirmation! fails to avoid to send the confirmation instructions

My app is set up so that if a user signs in with Oauth or Openid, they don't have to confirm their email address. 我的应用程序已设置好,如果用户使用Oauth或Openid登录,则无需确认其电子邮件地址。 However, Devise is still sending email confirmations. 但是,Devise仍在发送电子邮件确认。 When I call User.skip_confirmation! 当我调用User.skip_confirmation时! I get an undefined method error. 我得到一个未定义的方法错误。 My model: 我的模特:

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

My Controller: 我的控制器:

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

thanks for any help. 谢谢你的帮助。

You need to skip confirmation before you create the User objects and its persisted to the database. 在创建User对象并将其持久保存到数据库之前,您需要跳过确认。 So the user creation part of your method would look like 因此,方法的用户创建部分看起来像

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

If you're updating a user record, make sure to use skip_reconfirmation! 如果您要更新用户记录,请确保使用skip_reconfirmation! (mind the re ) (介意重新

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM