设计skip_confirmation!不工作 [英] Devise skip_confirmation! not working

查看:136
本文介绍了设计skip_confirmation!不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用设置为使用户使用Oauth或Openid登录时不需要确认其电子邮件地址。然而,Devise仍在发送电子邮件确认。当我打电话给User.skip_confirmation!我得到一个未定义的方法错误。我的模型:

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. However, Devise is still sending email confirmations. When I call 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

我的控制器:

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

感谢任何帮助。

推荐答案

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

You need to skip confirmation before you create the User objects and its persisted to the database. 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

这篇关于设计skip_confirmation!不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆