Skip to content

Commit

Permalink
패스워드 입력해야 기존 이메일과 병합 가능하도록
Browse files Browse the repository at this point in the history
  • Loading branch information
minhyeok92 committed Aug 23, 2014
1 parent c2b3f62 commit f91c7bd
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 36 deletions.
16 changes: 8 additions & 8 deletions app/controllers/users/omniauth_callbacks_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,22 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.find_for_oauth2(request.env["omniauth.auth"])

if @user.persisted? and @user.uid != nil
sign_in_and_redirect @user, :event => :authentication
elsif @user.persisted? and @user.uid == nil
if @user.nil?
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to users_merge_path(@user.id, 'facebook_data')
redirect_to users_merge_path('facebook')
else
sign_in_and_redirect @user, :event => :authentication
end
end

def google_oauth2
@user = User.find_for_oauth2(request.env["omniauth.auth"])

if @user.persisted? and @user.uid != nil
if @user.nil?
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to users_merge_path('facebook')
else
sign_in_and_redirect @user, :event => :authentication
elsif @user.persisted? and @user.uid == nil
session["devise.google_data"] = request.env["omniauth.auth"]
redirect_to users_merge_path(@user.id, 'google_data')
end
end

Expand Down
45 changes: 28 additions & 17 deletions app/controllers/users_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,32 +5,43 @@ def show
end

def merge
@user = User.find(params[:id])
@provider = params[:provider]
@user = User.where(email: session["devise." + @provider + "_data"]["info"]["email"]).first

if params[:callback] == 'callback'
provider_session = session["devise." + @provider]
end

@user.merge(params[:id], provider_session["provider"], provider_session["uid"])
def merge_callback
@provider = params[:provider]
provider_session = session["devise." + @provider + "_data"]
@user = User.where(email: provider_session["info"]["email"]).first

if @user.valid_password?(params[:password])
@user.merge(@user.id, provider_session["provider"], provider_session["uid"])
sign_in_and_redirect @user, :event => :authentication
else
redirect_to root_path
end

end
end

def sign_up_from_twitter
end

def sign_up_from_twitter_callback
auth = session["devise.twitter_data"]

@user = User.new(provider:auth["provider"],
uid:auth["uid"],
nickname: auth["extra"]["raw_info"]["screen_name"],
password: Devise.friendly_token[0,20])

@user.email = params[:user]["email"]

@user.save!
sign_in_and_redirect @user, :event => :authentication
if User.where(email: params[:user]["email"]).first
@user = User.new
render sign_up_from_twitter_path
else
auth = session["devise.twitter_data"]

@user = User.new(provider:auth["provider"],
uid:auth["uid"],
nickname: auth["extra"]["raw_info"]["screen_name"],
password: Devise.friendly_token[0,20])

@user.email = params[:user]["email"]

@user.save!
sign_in_and_redirect @user, :event => :authentication
end
end
end
17 changes: 10 additions & 7 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,15 +47,18 @@ def self.new_with_session(params, session)

def self.find_for_oauth2(access_token)
data = access_token.info

user = User.where(:email => data["email"]).first
user = User.where(provider: access_token.provider, uid: access_token.uid).first

unless user
user = User.create!(provider:access_token.provider,
uid:access_token.uid,
email: data["email"],
password: Devise.friendly_token[0,20],
nickname: data["name"])
if User.where(email: data["email"]).first
nil
else
user = User.create!(provider:access_token.provider,
uid:access_token.uid,
email: data["email"],
password: Devise.friendly_token[0,20],
nickname: data["name"])
end
end
user
end
Expand Down
9 changes: 6 additions & 3 deletions app/views/users/merge.html.erb
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@

<h1>중복되는 이메일이 있어요 => <%= @user.email %></h1>

<p>이 아이디와 통합할까요?</p>
<p>이 아이디와 통합하려면 기존 계정의 패스워드를 입력하세요</p>

<%= link_to 'Yeah', users_merge_path(@user.id, :provider => @provider, :callback => 'callback'), class: "btn btn-primary" %>
<%= link_to 'NoNo', root_path, class: "btn btn-default" %>
<%= form_tag({controller: "users", action: "merge_callback"}, method: "get") do %>
<%= password_field_tag(:password) %>
<%= submit_tag("Submit", class: "btn btn-primary") %>
<% end %>
3 changes: 2 additions & 1 deletion config/routes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
get 'users/sign_up_from_twitter', to: 'users#sign_up_from_twitter', as: 'sign_up_from_twitter'
post 'users/sign_up_from_twitter_callback', to: 'users#sign_up_from_twitter_callback', as: 'sign_up_from_twitter_callback'

get '/users/merge/:id/:provider(/:callback)', to: 'users#merge', as: 'users_merge'
get '/users/merge/:provider', to: 'users#merge', as: 'users_merge'
get '/users/merge/:provider/callback', to: 'users#merge_callback', as: 'users_merge_callback'

devise_for :users, :controllers => {
:omniauth_callbacks => "users/omniauth_callbacks",
Expand Down

1 comment on commit f91c7bd

@minhyeok4dev
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#21

Please sign in to comment.