Created
May 30, 2012 11:21
-
-
Save jhjguxin/2835586 to your computer and use it in GitHub Desktop.
skipping email confirmation for omniauth users using devise
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#I have a bit of code here where users can login via their twitter account. the problem here is, how can i skip email confirmation for user the sign up from external services like twitter. i am using devise and i do not know how to skip the email confirmation for this type of users. my code sample is as follows | |
#authentications_controller.rb | |
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 | |
#my registration controller is as follows | |
#registration_controller.rb | |
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 | |
#and my user model is below | |
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 | |
#my like to the auth url is below | |
#registration.html.erb | |
my like to the auth url is below | |
#my routh is like this | |
match 'auth/:provider/callback' => "authentications#create" | |
########################################################################################## | |
#Whenever you want to skip confirmation for Devise period, just use the following before the user.save... | |
######################################################################################### | |
#user.skip_confirmation! | |
################################################################################ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment