gpt4 book ai didi

ruby-on-rails - 使用设计跳过 omniauth 用户的电子邮件确认

转载 作者:行者123 更新时间:2023-12-03 14:35:50 25 4
gpt4 key购买 nike

我在这里有一些代码,用户可以通过他们的 Twitter 帐户登录。这里的问题是,我如何跳过用户从 Twitter 等外部服务注册的电子邮件确认。我正在使用设计,但我不知道如何跳过此类用户的电子邮件确认。我的代码示例如下

class AuthenticationsController < ApplicationController
# GET /authentications
# GET /authentications.json
def index
@authentications = current_user.authentications if current_user
end

# POST /authentications
# POST /authentications.json
def create
omniauth = request.env["omniauth.auth"]
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
if authentication
flash[:notice] = "Signed in successfully"
sign_in_and_redirect(:user, authentication.user)
elsif current_user
current_user.authentications.create!(:provider => omniauth['provider'], :uid => ['uid'])
flash[:notice] = "Authentication successful"
redirect_to authentication_url
else
user = User.new
user.apply_omniauth(omniauth)
if user.save
flash[:notice] = "Signed in successfully"
sign_in_and_redirect(:user, user)
else
session[:omniauth] = omniauth.except('extra')
redirect_to new_user_registration_url
end
end
rescue Exception => e
# Just spit out the error message and a backtrace.
render :text => "<html><body><pre>" + e.to_s + "</pre><hr /><pre>" + e.backtrace.join("\n") + "</pre></body></html>"

end


# DELETE /authentications/1
# DELETE /authentications/1.json
def destroy
@authentication = current_user.authentications.find(params[:id])
@authentication.destroy

respond_to do |format|
format.html { redirect_to authentications_url }
format.json { head :ok }
end
end
end

我的注册 Controller 如下
class RegistrationsController < Devise::RegistrationsController

def create
super
session[:omniauth] = nil unless @user.new_record?
end

private
def build_resource(*args)
super
if session[:omniauth]
@user.apply_omniauth(session[:omniauth])
@user.valid?
end
end
end

我的用户模型在下面
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :lockable, :timeoutable and
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :confirmable


# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me, :username, :about, :facebook_username, :twitter_username, :icon, :admin

validates_uniqueness_of :username

has_attached_file :icon, :styles => {:thumb => "64x64#"}, :default_url => 'icon_:style.png'
validates_attachment_content_type :icon, :content_type => ['image/jpeg', 'image/png', 'image/gif']
validates_attachment_size :icon, :less_than => 1.megabyte
ajaxful_rater
has_many :authentications
validates_presence_of :username

def apply_omniauth(omniauth)
self.email = omniauth['user_info']['email'] if email.blank?
self.name = omniauth['user_info']['name'] if name.blank?
self.image = omniauth['user_info']['image'] if image.blank?
authentications.build(:provider => omniauth['provider'], :uid => omniauth['uid'])
end

def password_required?
(authentications.empty? || !password.blank?) && super
end

end

我喜欢的身份验证网址如下
<a href="/auth/twitter" class="auth_provider">
<%= image_tag "twitter_64.png", :size => "64x64", :alt => "Twitter" %>
</a>

我的路是这样的
 match 'auth/:provider/callback' => "authentications#create"

最佳答案

每当您想跳过设计期间的确认时,只需在 user.save 之前使用以下内容...

user.skip_confirmation! 

所以基本上,在您的创建 Controller 操作中,如果它检测到 omniauth 逻辑,则调用它。

关于ruby-on-rails - 使用设计跳过 omniauth 用户的电子邮件确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7489914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com