Tengo un código aquí donde los usuarios pueden iniciar sesión a través de su cuenta de Twitter. el problema aquí es cómo puedo omitir la confirmación por correo electrónico para el usuario de la suscripción desde servicios externos como Twitter. Estoy utilizando el dispositivo y no sé cómo omitir la confirmación por correo electrónico para este tipo de usuarios. mi ejemplo de código es el siguienteomitiendo la confirmación de correo electrónico para usuarios de omniauth utilizando el dispositivo
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
mi regulador del registro es el siguiente
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
y mi modelo de usuario se encuentra por debajo
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
mi como a la url de autenticación está por debajo
<a href="/auth/twitter" class="auth_provider">
<%= image_tag "twitter_64.png", :size => "64x64", :alt => "Twitter" %>
</a>
mi ro UTH es así
match 'auth/:provider/callback' => "authentications#create"
gracias por este consejo. No sé si puede ayudar cada vez que me registre desde el servicio externo, no guarda el correo electrónico y en su lugar aparece un mensaje de error que dice que el correo electrónico no puede estar en blanco. es el mensaje de correo electrónico del servicio externo para ser guardado con el nuevo usuario – Uchenna
Twitter no le proporciona la dirección de correo electrónico de un usuario, por lo que tendrá que pedirles que lo suministren por separado. – Undistraction
Y luego, si manualmente les piden su correo electrónico, debe confirmarlo ... – frandroid