From d2fcd35b4849ea75a8f88546c2d04aa31a6d66fb Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 20 Aug 2014 17:16:03 +0900 Subject: [PATCH 01/23] .....sos --- .../users/omniauth_callbacks_controller.rb | 39 +++++++++++++------ app/controllers/users_controller.rb | 17 +++++++- app/models/user.rb | 15 +++---- app/views/users/sign_up_from_twitter.html.erb | 14 +++++++ config/routes.rb | 10 ++++- db/schema.rb | 6 ++- 6 files changed, 77 insertions(+), 24 deletions(-) create mode 100644 app/views/users/sign_up_from_twitter.html.erb diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 420938e..3e60c6f 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -7,7 +7,7 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController # sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated # set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? # elsif @user.persisted? and @user.uid == nil - + # session["devise.facebook_data"] = request.env["omniauth.auth"] # redirect_to users_merge_path(@user.id, 'facebook_data') @@ -52,20 +52,35 @@ def google_oauth2 redirect_to new_user_registration_url end end - - def twitter + + # def twitter + # @user = User.find_for_twitter_oauth(request.env["omniauth.auth"], current_user) + + # if @user.persisted? and @user.uid != nil + # sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated + # set_flash_message(:notice, :success, :kind => "Twitter") if is_navigational_format? + # elsif @user.persisted? and @user.uid == nil + # session["devise.twitter_data"] = request.env["omniauth.auth"] + # redirect_to users_merge_path(@user.id, 'twitter_data') + # else + # session["devise.twitter_data"] = request.env["omniauth.auth"] + # redirect_to new_user_registration_url + # end + # end + + def twitter @user = User.find_for_twitter_oauth(request.env["omniauth.auth"], current_user) - if @user.persisted? and @user.uid != nil + # 계정이 있다 = 성공 + if @user.persisted? and @user.email != "temp@todo.nut" sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated set_flash_message(:notice, :success, :kind => "Twitter") if is_navigational_format? - elsif @user.persisted? and @user.uid == nil - session["devise.twitter_data"] = request.env["omniauth.auth"] - redirect_to users_merge_path(@user.id, 'twitter_data') - else - session["devise.twitter_data"] = request.env["omniauth.auth"] - redirect_to new_user_registration_url + # 계정이 없다 = 새로운 이메일을 입력받아서 회원가입 시킨다 + elsif @user.email == "temp@todo.nut" + # session["devise.twitter_data"] = request.env["omniauth.auth"] + # render :text => @user.inspect + + redirect_to sign_up_from_twitter_path(@user.id) end end - -end \ No newline at end of file +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 87f2669..edd4016 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -5,7 +5,7 @@ def show end def merge - + @user = User.find(params[:id]) @provider = params[:provider] @@ -14,8 +14,21 @@ def merge provider_session = session["devise." + @provider] @user.merge(params[:id], provider_session["provider"], provider_session["uid"]) - redirect_to root_path + redirect_to root_path end end + + def sign_up_from_twitter + # render :text => session["devise.twitter_data"] + + @user = User.find(params[:id]) + + # if params[:callback] == 'callback' + # provider_session = session["devise.twitter_data"] + + # @user.merge(params[:id], provider_session["provider"], provider_session["uid"]) + # redirect_to root_path + # end + end end diff --git a/app/models/user.rb b/app/models/user.rb index ebcdd1d..ccbc8e4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -5,8 +5,8 @@ class User < ActiveRecord::Base has_many :todos has_many :history_users, foreign_key: :assignee_id - has_many :assigned_histories, through: :history_users - + has_many :assigned_histories, through: :history_users + has_many :project_users, foreign_key: :assignee_id has_many :assigned_projects, through: :project_users @@ -52,7 +52,7 @@ def self.new_with_session(params, session) def self.find_for_google_oauth2(access_token, signed_in_resource=nil) data = access_token.info - + user = User.where(:email => data["email"]).first # Uncomment the section below if you want users to be created if they don't exist @@ -68,16 +68,16 @@ def self.find_for_google_oauth2(access_token, signed_in_resource=nil) def self.find_for_twitter_oauth(auth, signed_in_resource=nil) - user = User.where(:email => auth.extra.raw_info.screen_name + "@todo.nut").first - + user = User.where(:uid => auth.uid, :provider => auth.provider).first + unless user user = User.create(provider:auth.provider, uid:auth.uid, - email: auth.extra.raw_info.screen_name + "@todo.nut", + email: "temp@todo.nut", nickname: auth.extra.raw_info.screen_name, password:Devise.friendly_token[0,20]) end - + user end @@ -89,4 +89,5 @@ def merge(id, provider, uid) end + end diff --git a/app/views/users/sign_up_from_twitter.html.erb b/app/views/users/sign_up_from_twitter.html.erb new file mode 100644 index 0000000..f6fb67c --- /dev/null +++ b/app/views/users/sign_up_from_twitter.html.erb @@ -0,0 +1,14 @@ +

새 이메일을 입력하세요 - Twitter

+
+ <%= form_for @user, url: {action: "sign_up_from_twitter"}, :role => 'form' do |f|%> + + +
+ <%= f.label :email %> + <%= f.email_field :email, autofocus: true, class: "form-control" %> +
+ + <%= f.submit :class => 'btn btn-success'%> + + <% end %> +
diff --git a/config/routes.rb b/config/routes.rb index 058501f..8202d30 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,9 +1,15 @@ Rails.application.routes.draw do + get 'users/sign_up_from_twitter/:id', to: 'users#sign_up_from_twitter', as: 'sign_up_from_twitter' + # get 'users/merge(/:email)' + # resources :users do + # resources : + # end + get '/users/merge/:id/:provider(/:callback)', to: 'users#merge', as: 'users_merge' - devise_for :users, :controllers => { + devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks", :registrations => "users/registrations", :sessions => "users/sessions" @@ -35,6 +41,6 @@ end - + root 'projects#index' end diff --git a/db/schema.rb b/db/schema.rb index ed36880..283cb55 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -50,6 +50,10 @@ t.integer "history_id" t.datetime "created_at" t.datetime "updated_at" + t.string "image_file_name" + t.string "image_content_type" + t.integer "image_file_size" + t.datetime "image_updated_at" t.string "image" end @@ -109,7 +113,7 @@ create_table "users", force: true do |t| t.string "email", default: "", null: false - t.string "encrypted_password", default: "", null: false + t.string "encrypted_password", default: "" t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" From 595e3af8b0963ceccb3d87755c4e7d636069ddb8 Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 20 Aug 2014 17:41:11 +0900 Subject: [PATCH 02/23] =?UTF-8?q?#19=20=ED=8A=B8=EC=9C=84=ED=84=B0=20?= =?UTF-8?q?=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8(=EC=9D=B4=EB=A9=94?= =?UTF-8?q?=EC=9D=BC=20=EC=9E=85=EB=A0=A5=ED=95=98=EC=97=AC=20=EA=B0=80?= =?UTF-8?q?=EC=9E=85)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 7 +++++++ app/models/user.rb | 6 ++++++ app/views/users/sign_up_from_twitter.html.erb | 2 +- config/routes.rb | 1 + 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index edd4016..402ca5f 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -24,6 +24,13 @@ def sign_up_from_twitter @user = User.find(params[:id]) + if request.post? + params = request.params[:user] + @user.update_from_twitter(@user.id, params[:email]) + + redirect_to root_path + end + # if params[:callback] == 'callback' # provider_session = session["devise.twitter_data"] diff --git a/app/models/user.rb b/app/models/user.rb index ccbc8e4..bb5be4e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -88,6 +88,12 @@ def merge(id, provider, uid) user.save end + def update_from_twitter(id, email) + user = User.where(:id => id).first + user.email = email + user.save + end + end diff --git a/app/views/users/sign_up_from_twitter.html.erb b/app/views/users/sign_up_from_twitter.html.erb index f6fb67c..045aaef 100644 --- a/app/views/users/sign_up_from_twitter.html.erb +++ b/app/views/users/sign_up_from_twitter.html.erb @@ -1,6 +1,6 @@

새 이메일을 입력하세요 - Twitter

- <%= form_for @user, url: {action: "sign_up_from_twitter"}, :role => 'form' do |f|%> + <%= form_for @user, url: {action: "sign_up_from_twitter"}, method: "post", :role => 'form' do |f|%>
diff --git a/config/routes.rb b/config/routes.rb index 8202d30..c723850 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,6 @@ Rails.application.routes.draw do get 'users/sign_up_from_twitter/:id', to: 'users#sign_up_from_twitter', as: 'sign_up_from_twitter' + post 'users/sign_up_from_twitter/:id', to: 'users#sign_up_from_twitter', as: 'sign_up_from_twitter_update' # get 'users/merge(/:email)' From d8b049bfc210265b4c67f3072d700c6d14680d83 Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 20 Aug 2014 18:42:53 +0900 Subject: [PATCH 03/23] =?UTF-8?q?=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20?= =?UTF-8?q?=EC=A3=BC=EC=84=9D=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 18 ------------------ app/controllers/users_controller.rb | 9 --------- config/routes.rb | 8 -------- 3 files changed, 35 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 3e60c6f..9710a0f 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -53,21 +53,6 @@ def google_oauth2 end end - # def twitter - # @user = User.find_for_twitter_oauth(request.env["omniauth.auth"], current_user) - - # if @user.persisted? and @user.uid != nil - # sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated - # set_flash_message(:notice, :success, :kind => "Twitter") if is_navigational_format? - # elsif @user.persisted? and @user.uid == nil - # session["devise.twitter_data"] = request.env["omniauth.auth"] - # redirect_to users_merge_path(@user.id, 'twitter_data') - # else - # session["devise.twitter_data"] = request.env["omniauth.auth"] - # redirect_to new_user_registration_url - # end - # end - def twitter @user = User.find_for_twitter_oauth(request.env["omniauth.auth"], current_user) @@ -77,9 +62,6 @@ def twitter set_flash_message(:notice, :success, :kind => "Twitter") if is_navigational_format? # 계정이 없다 = 새로운 이메일을 입력받아서 회원가입 시킨다 elsif @user.email == "temp@todo.nut" - # session["devise.twitter_data"] = request.env["omniauth.auth"] - # render :text => @user.inspect - redirect_to sign_up_from_twitter_path(@user.id) end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 402ca5f..bda2ae3 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -20,8 +20,6 @@ def merge end def sign_up_from_twitter - # render :text => session["devise.twitter_data"] - @user = User.find(params[:id]) if request.post? @@ -30,12 +28,5 @@ def sign_up_from_twitter redirect_to root_path end - - # if params[:callback] == 'callback' - # provider_session = session["devise.twitter_data"] - - # @user.merge(params[:id], provider_session["provider"], provider_session["uid"]) - # redirect_to root_path - # end end end diff --git a/config/routes.rb b/config/routes.rb index c723850..420cca5 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,12 +2,6 @@ get 'users/sign_up_from_twitter/:id', to: 'users#sign_up_from_twitter', as: 'sign_up_from_twitter' post 'users/sign_up_from_twitter/:id', to: 'users#sign_up_from_twitter', as: 'sign_up_from_twitter_update' - # get 'users/merge(/:email)' - - # resources :users do - # resources : - # end - get '/users/merge/:id/:provider(/:callback)', to: 'users#merge', as: 'users_merge' devise_for :users, :controllers => { @@ -16,9 +10,7 @@ :sessions => "users/sessions" } - #get '/users/(/:nickname)/edit', to: 'users/registrations#edit', as: 'edit_user' get '/users/(/:nickname)', to: 'users#show', as: 'show_user' - #resources :users, only: [:show] resources :projects do resources :todos do From 089507f0ee52a0683f87f42f6a31eea69f89868c Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 20 Aug 2014 19:28:30 +0900 Subject: [PATCH 04/23] =?UTF-8?q?=EC=B2=98=EC=9D=8C=20=EA=B0=80=EC=9E=85?= =?UTF-8?q?=EC=8B=9C=20=EC=9C=A0=EB=8B=88=ED=81=AC=ED=95=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=A9=94=EC=9D=BC=20=EB=B6=80=EC=97=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/user.rb | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index bb5be4e..7e10f47 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -30,15 +30,12 @@ def self.find_by_nickname(nickname) end def self.from_omniauth(auth) - @my_logger ||= Logger.new("#{Rails.root}/log/my.log") + where(auth.slice(:provider, :uid)).first_or_create do |user| - @my_logger.debug "test facebok" user.email = auth.info.email user.password = Devise.friendly_token[0,20] # user.password = nil user.nickname = auth.info.name - - @my_logger.debug user.inspect end end @@ -50,7 +47,7 @@ def self.new_with_session(params, session) end end - def self.find_for_google_oauth2(access_token, signed_in_resource=nil) + def self.find_for_oauth2(access_token, signed_in_resource=nil) data = access_token.info user = User.where(:email => data["email"]).first @@ -73,7 +70,8 @@ def self.find_for_twitter_oauth(auth, signed_in_resource=nil) unless user user = User.create(provider:auth.provider, uid:auth.uid, - email: "temp@todo.nut", + # email: auth.extra.raw_info.screen_name + auth.uid[1..5] + "@todo.nut", + email: Devise.friendly_token[0,10] + "@todo.nut", nickname: auth.extra.raw_info.screen_name, password:Devise.friendly_token[0,20]) end From 445f1e2a5cde527ccbe47616a1aace14271a98c8 Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 20 Aug 2014 19:32:28 +0900 Subject: [PATCH 05/23] =?UTF-8?q?#41=20OAuth=20=EB=A1=9C=EA=B7=B8=EC=9D=B8?= =?UTF-8?q?=20=EC=8B=9C=20=ED=8C=A8=EC=8A=A4=EC=9B=8C=EB=93=9C=20=ED=95=84?= =?UTF-8?q?=EC=9A=94=ED=95=98=EC=A7=80=EC=95=8A=EC=95=84=EB=8F=84=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=A0=95=EB=B3=B4=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EB=90=A0=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D?= =?UTF-8?q?=ED=95=9C=EB=8B=A4=20(#64=20MERGE=20=EC=9D=B4=ED=9B=84=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=20=EA=B0=80=EB=8A=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 6 +- .../users/omniauth_callbacks_controller.rb | 22 +----- .../users/registrations_controller.rb | 27 ++++++- app/views/devise/registrations/edit.html.erb | 77 ++++++++++--------- 4 files changed, 71 insertions(+), 61 deletions(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index db7281b..238b307 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -8,8 +8,8 @@ class ApplicationController < ActionController::Base # migration for new field nickname which is required field. before_action :is_nickname_not_empty? - - + @my_logger ||= Logger.new("#{Rails.root}/log/my.log") + protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) << :nickname @@ -22,5 +22,5 @@ def is_nickname_not_empty? redirect_to edit_user_registration_path end end - + end diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 9710a0f..e86b825 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -1,25 +1,7 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController - # def facebook - # # You need to implement the method below in your model (e.g. app/models/user.rb) - # @user = User.from_omniauth(request.env["omniauth.auth"]) - - # if @user.persisted? and @user.uid != nil - # sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated - # set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? - # elsif @user.persisted? and @user.uid == nil - - - # session["devise.facebook_data"] = request.env["omniauth.auth"] - # redirect_to users_merge_path(@user.id, 'facebook_data') - # else - # session["devise.facebook_data"] = request.env["omniauth.auth"] - # redirect_to new_user_registration_url - # end - # end - def facebook # You need to implement the method below in your model (e.g. app/models/user.rb) - @user = User.find_for_google_oauth2(request.env["omniauth.auth"], current_user) + @user = User.find_for_oauth2(request.env["omniauth.auth"], current_user) # OAuth 성공 if @user.persisted? and @user.uid != nil @@ -37,7 +19,7 @@ def facebook def google_oauth2 # You need to implement the method below in your model (e.g. app/models/user.rb) - @user = User.find_for_google_oauth2(request.env["omniauth.auth"], current_user) + @user = User.find_for_oauth2(request.env["omniauth.auth"], current_user) # OAuth 성공 if @user.persisted? and @user.uid != nil diff --git a/app/controllers/users/registrations_controller.rb b/app/controllers/users/registrations_controller.rb index a937a59..11ceb4a 100644 --- a/app/controllers/users/registrations_controller.rb +++ b/app/controllers/users/registrations_controller.rb @@ -1,3 +1,28 @@ class Users::RegistrationsController < Devise::RegistrationsController skip_before_action :is_nickname_not_empty? -end \ No newline at end of file + + def update + if current_user.provider == nil + super + else + account_update_params = devise_parameter_sanitizer.sanitize(:account_update) + + # required for settings form to submit when password is left blank + if account_update_params[:password].blank? + account_update_params.delete("password") + account_update_params.delete("password_confirmation") + account_update_params.delete("current_password") + end + + @user = User.find(current_user.id) + if @user.update_attributes(account_update_params) + set_flash_message :notice, :updated + # Sign in the user bypassing validation in case their password changed + sign_in @user, :bypass => true + redirect_to after_update_path_for(@user) + else + render "edit" + end + end + end +end diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb index 637de6d..6bc5870 100644 --- a/app/views/devise/registrations/edit.html.erb +++ b/app/views/devise/registrations/edit.html.erb @@ -4,43 +4,46 @@

Edit <%= resource_name.to_s.humanize %>

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> - <%= devise_error_messages! %> - -
- <%= f.label :email %> - <%= f.email_field :email, autofocus: true, class: "form-control" %> -
- - <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> -
Currently waiting confirmation for: <%= resource.unconfirmed_email %>
- <% end %> - -
- <%= f.label :nickname %> - <%= f.text_field :nickname, class: "form-control" %> -
- -
- <%= f.label :password %> (leave blank if you don't want to change it) - <%= f.password_field :password, autocomplete: "off", class: "form-control" %> -
- -
- <%= f.label :password_confirmation %> - <%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %> -
- -
- <%= f.label :current_password %> (we need your current password to confirm your changes) - <%= f.password_field :current_password, autocomplete: "off", class: "form-control" %> -
- -
- <%= link_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete, class: "btn btn-default" %> - <%= link_to "Back", :back, class: "btn btn-default" %> - <%= f.submit "Update", class: "btn btn-default" %> -
- + <%= devise_error_messages! %> + +
+ <%= f.label :email %> + <%= f.email_field :email, autofocus: true, class: "form-control" %> +
+ + <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> +
Currently waiting confirmation for: <%= resource.unconfirmed_email %>
+ <% end %> + +
+ <%= f.label :nickname %> + <%= f.text_field :nickname, class: "form-control" %> +
+ + <% if current_user.provider == nil %> +
+ <%= f.label :password %> (leave blank if you don't want to change it) + <%= f.password_field :password, autocomplete: "off", class: "form-control" %> +
+ +
+ <%= f.label :password_confirmation %> + <%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %> +
+ + +
수정하기 위해선 비밀번호를 입력해야 합니다 + <%= f.label :current_password %> + <%= f.password_field :current_password, autocomplete: "off", class: "form-control" %> +
+ <% end %> + +
+ <%= link_to "Cancel my account", registration_path(resource_name), data: { confirm: "Are you sure?" }, method: :delete, class: "btn btn-default" %> + <%= link_to "Back", :back, class: "btn btn-default" %> + <%= f.submit "Update", class: "btn btn-default" %> +
+ <% end %>
From 008b11e5a2f5f75312659a8b76230273c68b34d2 Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 20 Aug 2014 19:41:47 +0900 Subject: [PATCH 06/23] =?UTF-8?q?=ED=9C=B4=20=EB=8B=A4=EC=8B=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users/omniauth_callbacks_controller.rb | 4 ++-- app/models/user.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 9710a0f..75c5609 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -57,11 +57,11 @@ def twitter @user = User.find_for_twitter_oauth(request.env["omniauth.auth"], current_user) # 계정이 있다 = 성공 - if @user.persisted? and @user.email != "temp@todo.nut" + if @user.persisted? and @user.email[0..3] != "temp" sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated set_flash_message(:notice, :success, :kind => "Twitter") if is_navigational_format? # 계정이 없다 = 새로운 이메일을 입력받아서 회원가입 시킨다 - elsif @user.email == "temp@todo.nut" + else redirect_to sign_up_from_twitter_path(@user.id) end end diff --git a/app/models/user.rb b/app/models/user.rb index 7e10f47..f9de7f3 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -71,7 +71,7 @@ def self.find_for_twitter_oauth(auth, signed_in_resource=nil) user = User.create(provider:auth.provider, uid:auth.uid, # email: auth.extra.raw_info.screen_name + auth.uid[1..5] + "@todo.nut", - email: Devise.friendly_token[0,10] + "@todo.nut", + email: "temp." + Devise.friendly_token[0,7] + "@todo.nut", nickname: auth.extra.raw_info.screen_name, password:Devise.friendly_token[0,20]) end From 10225d8476483e47a92e3c533cd23d379e64cb2d Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 20 Aug 2014 19:49:07 +0900 Subject: [PATCH 07/23] =?UTF-8?q?timestamp=20=EB=A5=BC=20=ED=99=9C?= =?UTF-8?q?=EC=9A=A9=ED=95=9C=20=EB=B9=84=EA=B5=90=EB=A1=9C=20=EC=B2=AB=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=EC=9D=B8=EC=A7=80=20=ED=99=95?= =?UTF-8?q?=EC=9D=B8=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 75c5609..94be8f1 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -1,22 +1,4 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController - # def facebook - # # You need to implement the method below in your model (e.g. app/models/user.rb) - # @user = User.from_omniauth(request.env["omniauth.auth"]) - - # if @user.persisted? and @user.uid != nil - # sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated - # set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format? - # elsif @user.persisted? and @user.uid == nil - - - # session["devise.facebook_data"] = request.env["omniauth.auth"] - # redirect_to users_merge_path(@user.id, 'facebook_data') - # else - # session["devise.facebook_data"] = request.env["omniauth.auth"] - # redirect_to new_user_registration_url - # end - # end - def facebook # You need to implement the method below in your model (e.g. app/models/user.rb) @user = User.find_for_google_oauth2(request.env["omniauth.auth"], current_user) @@ -55,13 +37,15 @@ def google_oauth2 def twitter @user = User.find_for_twitter_oauth(request.env["omniauth.auth"], current_user) + time = [@user.created_at, @user.updated_at] # 계정이 있다 = 성공 - if @user.persisted? and @user.email[0..3] != "temp" + if @user.persisted? and time[0] != time[1] sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated set_flash_message(:notice, :success, :kind => "Twitter") if is_navigational_format? # 계정이 없다 = 새로운 이메일을 입력받아서 회원가입 시킨다 else + # render :text => text.inspect redirect_to sign_up_from_twitter_path(@user.id) end end From e314efb9505ea6b8c12d4759f2c053b9a7488c7a Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 20 Aug 2014 20:29:51 +0900 Subject: [PATCH 08/23] =?UTF-8?q?1=EC=B0=A8=20=EB=B3=B4=EC=99=84=20?= =?UTF-8?q?=EB=B0=8F=20=EC=95=9E=EC=9C=BC=EB=A1=9C=20=EB=B9=84=EC=8A=B7?= =?UTF-8?q?=ED=95=9C=20=EB=B2=84=EA=B7=B8=20=EC=9E=91=EC=97=85=EC=9D=80=20?= =?UTF-8?q?=EC=9D=B4=20=EB=B8=8C=EB=9E=9C=EC=B9=98=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=95=A9=EB=8B=88=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 23 ++++--------------- app/models/user.rb | 21 +++++++---------- 2 files changed, 12 insertions(+), 32 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 44583e2..5ffd4b6 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -1,51 +1,36 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def facebook - # You need to implement the method below in your model (e.g. app/models/user.rb) - @user = User.find_for_oauth2(request.env["omniauth.auth"], current_user) + @user = User.find_for_oauth2(request.env["omniauth.auth"]) - # OAuth 성공 if @user.persisted? and @user.uid != nil flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" sign_in_and_redirect @user, :event => :authentication - # 중복 이메일이 있을 경우 elsif @user.persisted? and @user.uid == nil session["devise.facebook_data"] = request.env["omniauth.auth"] redirect_to users_merge_path(@user.id, 'facebook_data') - else - session["devise.facebook_data"] = request.env["omniauth.auth"] - redirect_to new_user_registration_url end end def google_oauth2 - # You need to implement the method below in your model (e.g. app/models/user.rb) - @user = User.find_for_oauth2(request.env["omniauth.auth"], current_user) + @user = User.find_for_oauth2(request.env["omniauth.auth"]) - # OAuth 성공 if @user.persisted? and @user.uid != nil flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Google" 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') - else - session["devise.google_data"] = request.env["omniauth.auth"] - redirect_to new_user_registration_url end end def twitter - @user = User.find_for_twitter_oauth(request.env["omniauth.auth"], current_user) + @user = User.find_for_twitter_oauth(request.env["omniauth.auth"]) time = [@user.created_at, @user.updated_at] - # 계정이 있다 = 성공 if @user.persisted? and time[0] != time[1] - sign_in_and_redirect @user, :event => :authentication #this will throw if @user is not activated + sign_in_and_redirect @user, :event => :authentication set_flash_message(:notice, :success, :kind => "Twitter") if is_navigational_format? - # 계정이 없다 = 새로운 이메일을 입력받아서 회원가입 시킨다 else - # render :text => text.inspect redirect_to sign_up_from_twitter_path(@user.id) end end diff --git a/app/models/user.rb b/app/models/user.rb index f9de7f3..11af63e 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,6 +1,4 @@ class User < ActiveRecord::Base - # Include default devise modules. Others available are: - # :confirmable, :lockable, :timeoutable and :omniauthable has_many :histories has_many :todos @@ -20,12 +18,13 @@ class User < ActiveRecord::Base validates_presence_of :nickname validates_uniqueness_of :nickname + + def to_param nickname end def self.find_by_nickname(nickname) - #where(arel_table[:nickname].matches("#{nickname}")).take(1) user = User.where(:nickname => nickname).first end @@ -34,7 +33,6 @@ def self.from_omniauth(auth) where(auth.slice(:provider, :uid)).first_or_create do |user| user.email = auth.info.email user.password = Devise.friendly_token[0,20] - # user.password = nil user.nickname = auth.info.name end end @@ -47,35 +45,32 @@ def self.new_with_session(params, session) end end - def self.find_for_oauth2(access_token, signed_in_resource=nil) + def self.find_for_oauth2(access_token) data = access_token.info user = User.where(:email => data["email"]).first - # Uncomment the section below if you want users to be created if they don't exist 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"]) + nickname: data["name"])! end user end - def self.find_for_twitter_oauth(auth, signed_in_resource=nil) + def self.find_for_twitter_oauth(auth) user = User.where(:uid => auth.uid, :provider => auth.provider).first unless user user = User.create(provider:auth.provider, uid:auth.uid, - # email: auth.extra.raw_info.screen_name + auth.uid[1..5] + "@todo.nut", email: "temp." + Devise.friendly_token[0,7] + "@todo.nut", nickname: auth.extra.raw_info.screen_name, - password:Devise.friendly_token[0,20]) + password:Devise.friendly_token[0,20])! end - user end @@ -83,13 +78,13 @@ def merge(id, provider, uid) user = User.where(:id => id).first user.provider = provider user.uid = uid - user.save + user.save! end def update_from_twitter(id, email) user = User.where(:id => id).first user.email = email - user.save + user.save! end From 41996a749e5dc239e179f2b75d57d097a64efa9d Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 20 Aug 2014 20:32:22 +0900 Subject: [PATCH 09/23] hotfix --- app/models/user.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 11af63e..1270e9c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -51,11 +51,11 @@ def self.find_for_oauth2(access_token) user = User.where(:email => data["email"]).first unless user - user = User.create(provider:access_token.provider, + user = User.create!(provider:access_token.provider, uid:access_token.uid, email: data["email"], password: Devise.friendly_token[0,20], - nickname: data["name"])! + nickname: data["name"]) end user end @@ -65,11 +65,11 @@ def self.find_for_twitter_oauth(auth) user = User.where(:uid => auth.uid, :provider => auth.provider).first unless user - user = User.create(provider:auth.provider, + user = User.create!(provider:auth.provider, uid:auth.uid, email: "temp." + Devise.friendly_token[0,7] + "@todo.nut", nickname: auth.extra.raw_info.screen_name, - password:Devise.friendly_token[0,20])! + password:Devise.friendly_token[0,20]) end user end From c2b3f62d18b2c1ed9f17dab0241a00d4f3e53f36 Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Sat, 23 Aug 2014 20:43:55 +0900 Subject: [PATCH 10/23] =?UTF-8?q?=ED=8A=B8=EC=9C=84=ED=84=B0=20=EB=A1=9C?= =?UTF-8?q?=EA=B7=B8=EC=9D=B8=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 14 ++++++------- app/controllers/users_controller.rb | 20 +++++++++++-------- app/models/user.rb | 9 --------- app/views/users/sign_up_from_twitter.html.erb | 3 ++- config/routes.rb | 4 ++-- 5 files changed, 22 insertions(+), 28 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 5ffd4b6..42d25a4 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -3,7 +3,6 @@ def facebook @user = User.find_for_oauth2(request.env["omniauth.auth"]) if @user.persisted? and @user.uid != nil - flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" sign_in_and_redirect @user, :event => :authentication elsif @user.persisted? and @user.uid == nil session["devise.facebook_data"] = request.env["omniauth.auth"] @@ -15,7 +14,6 @@ def google_oauth2 @user = User.find_for_oauth2(request.env["omniauth.auth"]) if @user.persisted? and @user.uid != nil - flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Google" sign_in_and_redirect @user, :event => :authentication elsif @user.persisted? and @user.uid == nil session["devise.google_data"] = request.env["omniauth.auth"] @@ -23,15 +21,15 @@ def google_oauth2 end end - def twitter + def twitter @user = User.find_for_twitter_oauth(request.env["omniauth.auth"]) - time = [@user.created_at, @user.updated_at] - if @user.persisted? and time[0] != time[1] - sign_in_and_redirect @user, :event => :authentication - set_flash_message(:notice, :success, :kind => "Twitter") if is_navigational_format? + if @user.nil? + @user = User.new + session["devise.twitter_data"] = request.env["omniauth.auth"] + render sign_up_from_twitter_path else - redirect_to sign_up_from_twitter_path(@user.id) + sign_in_and_redirect @user, :event => :authentication end end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index bda2ae3..b591c9a 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -5,8 +5,6 @@ def show end def merge - - @user = User.find(params[:id]) @provider = params[:provider] @@ -20,13 +18,19 @@ def merge end def sign_up_from_twitter - @user = User.find(params[:id]) + end - if request.post? - params = request.params[:user] - @user.update_from_twitter(@user.id, params[:email]) + def sign_up_from_twitter_callback + auth = session["devise.twitter_data"] - redirect_to root_path - end + @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 diff --git a/app/models/user.rb b/app/models/user.rb index 1270e9c..015f397 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -63,15 +63,6 @@ def self.find_for_oauth2(access_token) def self.find_for_twitter_oauth(auth) user = User.where(:uid => auth.uid, :provider => auth.provider).first - - unless user - user = User.create!(provider:auth.provider, - uid:auth.uid, - email: "temp." + Devise.friendly_token[0,7] + "@todo.nut", - nickname: auth.extra.raw_info.screen_name, - password:Devise.friendly_token[0,20]) - end - user end def merge(id, provider, uid) diff --git a/app/views/users/sign_up_from_twitter.html.erb b/app/views/users/sign_up_from_twitter.html.erb index 045aaef..12687c8 100644 --- a/app/views/users/sign_up_from_twitter.html.erb +++ b/app/views/users/sign_up_from_twitter.html.erb @@ -1,6 +1,7 @@

새 이메일을 입력하세요 - Twitter

+
- <%= form_for @user, url: {action: "sign_up_from_twitter"}, method: "post", :role => 'form' do |f|%> + <%= form_for @user, url: {action: "sign_up_from_twitter_callback", controller: "/users"}, method: "post", :role => 'form' do |f|%>
diff --git a/config/routes.rb b/config/routes.rb index 420cca5..7f3b991 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,6 @@ Rails.application.routes.draw do - get 'users/sign_up_from_twitter/:id', to: 'users#sign_up_from_twitter', as: 'sign_up_from_twitter' - post 'users/sign_up_from_twitter/:id', to: 'users#sign_up_from_twitter', as: 'sign_up_from_twitter_update' + 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' From f91c7bde0867d65db2933a06bde6ec847f699d59 Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Sat, 23 Aug 2014 22:15:55 +0900 Subject: [PATCH 11/23] =?UTF-8?q?=ED=8C=A8=EC=8A=A4=EC=9B=8C=EB=93=9C=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=ED=95=B4=EC=95=BC=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EC=9D=B4=EB=A9=94=EC=9D=BC=EA=B3=BC=20=EB=B3=91=ED=95=A9=20?= =?UTF-8?q?=EA=B0=80=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 16 +++---- app/controllers/users_controller.rb | 45 ++++++++++++------- app/models/user.rb | 17 ++++--- app/views/users/merge.html.erb | 9 ++-- config/routes.rb | 3 +- 5 files changed, 54 insertions(+), 36 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 42d25a4..6bf875b 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -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 diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index b591c9a..ca749a0 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -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 diff --git a/app/models/user.rb b/app/models/user.rb index 015f397..bc66d3a 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -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 diff --git a/app/views/users/merge.html.erb b/app/views/users/merge.html.erb index 4a446ae..5b18726 100644 --- a/app/views/users/merge.html.erb +++ b/app/views/users/merge.html.erb @@ -1,7 +1,10 @@

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

-

이 아이디와 통합할까요?

+

이 아이디와 통합하려면 기존 계정의 패스워드를 입력하세요

-<%= 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" %> \ No newline at end of file +<%= form_tag({controller: "users", action: "merge_callback"}, method: "get") do %> + <%= password_field_tag(:password) %> + <%= submit_tag("Submit", class: "btn btn-primary") %> + +<% end %> \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 7f3b991..2391b78 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -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", From c331e8bb17d17cb1ca9de7fea476b870d2a83023 Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Sun, 24 Aug 2014 18:58:06 +0900 Subject: [PATCH 12/23] =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20?= =?UTF-8?q?=EA=B8=B0=EC=A4=80=EC=9C=BC=EB=A1=9C=20=EB=9D=BC=EC=9A=B0?= =?UTF-8?q?=ED=8C=85=20=EB=AC=B6=EC=96=B4=EB=B3=B4=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/routes.rb | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 2391b78..b27dba8 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,16 +1,18 @@ Rails.application.routes.draw do - 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/: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", :registrations => "users/registrations", :sessions => "users/sessions" } + controller :users do + get 'users/sign_up_from_twitter', action: 'sign_up_from_twitter', as: 'sign_up_from_twitter' + post 'users/sign_up_from_twitter_callback', action: 'sign_up_from_twitter_callback', as: 'sign_up_from_twitter_callback' + + get 'users/merge/:provider', action: 'merge', as: 'users_merge' + get 'users/merge/:provider/callback', action: 'merge_callback', as: 'users_merge_callback' + end + get '/users/(/:nickname)', to: 'users#show', as: 'show_user' resources :projects do From 84e6faaa36c685e999794fd1bc7a6475787fd6f9 Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Tue, 26 Aug 2014 01:12:43 +0900 Subject: [PATCH 13/23] =?UTF-8?q?session[devise.{provider=5Fdata}]=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=EC=9D=84=20session[omniauth]=EB=A1=9C=20?= =?UTF-8?q?=ED=86=B5=EC=9D=BC=ED=95=98=EC=97=AC=20string=EC=9D=84=20?= =?UTF-8?q?=EB=A7=8C=EB=93=9C=EB=8A=94=20=EB=B2=88=EA=B1=B0=EB=A1=9C?= =?UTF-8?q?=EC=9B=80=20=EB=B0=A9=EC=A7=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 10 +++++----- app/controllers/users_controller.rb | 13 +++++-------- app/models/user.rb | 2 +- config/routes.rb | 4 ++-- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 6bf875b..5e43d83 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -3,8 +3,8 @@ def facebook @user = User.find_for_oauth2(request.env["omniauth.auth"]) if @user.nil? - session["devise.facebook_data"] = request.env["omniauth.auth"] - redirect_to users_merge_path('facebook') + session["omniauth"] = request.env["omniauth.auth"] + redirect_to users_merge_path else sign_in_and_redirect @user, :event => :authentication end @@ -14,8 +14,8 @@ def google_oauth2 @user = User.find_for_oauth2(request.env["omniauth.auth"]) if @user.nil? - session["devise.facebook_data"] = request.env["omniauth.auth"] - redirect_to users_merge_path('facebook') + session["omniauth"] = request.env["omniauth.auth"] + redirect_to users_merge_path else sign_in_and_redirect @user, :event => :authentication end @@ -26,7 +26,7 @@ def twitter if @user.nil? @user = User.new - session["devise.twitter_data"] = request.env["omniauth.auth"] + session["omniauth"] = request.env["omniauth.auth"] render sign_up_from_twitter_path else sign_in_and_redirect @user, :event => :authentication diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index ca749a0..e66178c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -5,18 +5,15 @@ def show end def merge - @provider = params[:provider] - @user = User.where(email: session["devise." + @provider + "_data"]["info"]["email"]).first - + @user = User.where(email: session["omniauth"]["info"]["email"]).first end def merge_callback - @provider = params[:provider] - provider_session = session["devise." + @provider + "_data"] - @user = User.where(email: provider_session["info"]["email"]).first + auth = session["omniauth"] + @user = User.where(email: auth["info"]["email"]).first if @user.valid_password?(params[:password]) - @user.merge(@user.id, provider_session["provider"], provider_session["uid"]) + @user.merge(@user.id, auth["provider"], auth["uid"]) sign_in_and_redirect @user, :event => :authentication else redirect_to root_path @@ -31,7 +28,7 @@ def sign_up_from_twitter_callback @user = User.new render sign_up_from_twitter_path else - auth = session["devise.twitter_data"] + auth = session["omniauth"] @user = User.new(provider:auth["provider"], uid:auth["uid"], diff --git a/app/models/user.rb b/app/models/user.rb index bc66d3a..fda28a9 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -39,7 +39,7 @@ def self.from_omniauth(auth) def self.new_with_session(params, session) super.tap do |user| - if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["raw_info"] + if data = session["omniauth"] && session["omniauth"]["extra"]["raw_info"] user.email = data["email"] if user.email.blank? end end diff --git a/config/routes.rb b/config/routes.rb index b27dba8..4ac2967 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -9,8 +9,8 @@ get 'users/sign_up_from_twitter', action: 'sign_up_from_twitter', as: 'sign_up_from_twitter' post 'users/sign_up_from_twitter_callback', action: 'sign_up_from_twitter_callback', as: 'sign_up_from_twitter_callback' - get 'users/merge/:provider', action: 'merge', as: 'users_merge' - get 'users/merge/:provider/callback', action: 'merge_callback', as: 'users_merge_callback' + get 'users/merge', action: 'merge', as: 'users_merge' + get 'users/merge/callback', action: 'merge_callback', as: 'users_merge_callback' end get '/users/(/:nickname)', to: 'users#show', as: 'show_user' From faf679a269298854d0b6e920447b7a08f8921deb Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Tue, 26 Aug 2014 02:17:04 +0900 Subject: [PATCH 14/23] =?UTF-8?q?oauth=EB=A1=9C=20=EC=B5=9C=EC=B4=88=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=8B=9C=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=EC=9D=84=20=EC=9E=85=EB=A0=A5=EB=B0=9B=EC=8A=B5?= =?UTF-8?q?=EB=8B=88=EB=8B=A4(=EB=8B=A8,=20=ED=8A=B8=EC=9C=84=ED=84=B0?= =?UTF-8?q?=EB=8A=94=20=EC=A0=9C=EC=99=B8-=20=EA=B8=B0=EC=A1=B4=EC=9D=98?= =?UTF-8?q?=20nickname=20=ED=95=84=EB=93=9C=EB=A5=BC=20=EC=9D=BD=EC=96=B4?= =?UTF-8?q?=EC=98=AC=20=EC=88=98=20=EC=9E=88=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/application_controller.rb | 4 ---- .../users/omniauth_callbacks_controller.rb | 7 +++++-- app/controllers/users_controller.rb | 14 ++++++++++++++ app/models/user.rb | 8 ++------ app/views/users/nickname/new.html.erb | 8 ++++++++ config/routes.rb | 3 +++ 6 files changed, 32 insertions(+), 12 deletions(-) create mode 100644 app/views/users/nickname/new.html.erb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 238b307..0bfb80a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -5,10 +5,6 @@ class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? before_action :authenticate_user! - # migration for new field nickname which is required field. - before_action :is_nickname_not_empty? - - @my_logger ||= Logger.new("#{Rails.root}/log/my.log") protected def configure_permitted_parameters diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 5e43d83..d47a745 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -13,9 +13,12 @@ def facebook def google_oauth2 @user = User.find_for_oauth2(request.env["omniauth.auth"]) + session["omniauth"] = request.env["omniauth.auth"] + if @user.nil? - session["omniauth"] = request.env["omniauth.auth"] - redirect_to users_merge_path + render users_nickname_new_path + elsif @user == "dup" + redirect_to users_merge_path else sign_in_and_redirect @user, :event => :authentication end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index e66178c..f9095d7 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -20,6 +20,20 @@ def merge_callback end end + def nickname_new + end + + def nickname_new_callback + auth = session["omniauth"] + + @user = User.create!(provider:auth["provider"], + uid: auth["uid"], + email: auth["info"]["email"], + password: Devise.friendly_token[0,20], + nickname: params[:nickname]) + sign_in_and_redirect @user, :event => :authentication + end + def sign_up_from_twitter end diff --git a/app/models/user.rb b/app/models/user.rb index fda28a9..c9eea67 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -51,13 +51,9 @@ def self.find_for_oauth2(access_token) unless user if User.where(email: data["email"]).first - nil + "dup" else - user = User.create!(provider:access_token.provider, - uid:access_token.uid, - email: data["email"], - password: Devise.friendly_token[0,20], - nickname: data["name"]) + nil end end user diff --git a/app/views/users/nickname/new.html.erb b/app/views/users/nickname/new.html.erb new file mode 100644 index 0000000..e59729d --- /dev/null +++ b/app/views/users/nickname/new.html.erb @@ -0,0 +1,8 @@ + +<%= form_tag({controller: "/users", action: "nickname_new_callback"}, method: "post") do %> + +

처음이십니다. 새로운 닉네임을 입력하세요

+<%= text_field_tag(:nickname) %> + <%= submit_tag("Submit", class: "btn btn-primary") %> +<% end %> + diff --git a/config/routes.rb b/config/routes.rb index 4ac2967..8f310be 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,6 +11,9 @@ get 'users/merge', action: 'merge', as: 'users_merge' get 'users/merge/callback', action: 'merge_callback', as: 'users_merge_callback' + + get 'users/nickname/new', action: 'nickname_new' + post 'users/nickname/new/callback', action: 'nickname_new_callback' end get '/users/(/:nickname)', to: 'users#show', as: 'show_user' From 13fe177d15e347ca833b1ad72f886e567439920b Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Tue, 26 Aug 2014 17:06:27 +0900 Subject: [PATCH 15/23] =?UTF-8?q?OAuth=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=8B=9C=EC=97=94=20=ED=8C=A8=EC=8A=A4=EC=9B=8C=EB=93=9C?= =?UTF-8?q?=EB=A5=BC=20DB=EC=97=90=20=EC=A0=80=EC=9E=A5=ED=95=98=EC=A7=80?= =?UTF-8?q?=20=EC=95=8A=EB=8A=94=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 11 +++++++---- app/controllers/users_controller.rb | 4 +--- app/models/user.rb | 10 +++++++--- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index d47a745..290a491 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -2,9 +2,12 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def facebook @user = User.find_for_oauth2(request.env["omniauth.auth"]) + session["omniauth"] = request.env["omniauth.auth"] + if @user.nil? - session["omniauth"] = request.env["omniauth.auth"] - redirect_to users_merge_path + render users_nickname_new_path + elsif @user == "duplicated" + redirect_to users_merge_path else sign_in_and_redirect @user, :event => :authentication end @@ -14,10 +17,10 @@ def google_oauth2 @user = User.find_for_oauth2(request.env["omniauth.auth"]) session["omniauth"] = request.env["omniauth.auth"] - + if @user.nil? render users_nickname_new_path - elsif @user == "dup" + elsif @user == "duplicated" redirect_to users_merge_path else sign_in_and_redirect @user, :event => :authentication diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index f9095d7..136a183 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -29,7 +29,6 @@ def nickname_new_callback @user = User.create!(provider:auth["provider"], uid: auth["uid"], email: auth["info"]["email"], - password: Devise.friendly_token[0,20], nickname: params[:nickname]) sign_in_and_redirect @user, :event => :authentication end @@ -46,8 +45,7 @@ def sign_up_from_twitter_callback @user = User.new(provider:auth["provider"], uid:auth["uid"], - nickname: auth["extra"]["raw_info"]["screen_name"], - password: Devise.friendly_token[0,20]) + nickname: auth["extra"]["raw_info"]["screen_name"]) @user.email = params[:user]["email"] diff --git a/app/models/user.rb b/app/models/user.rb index c9eea67..f320b20 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -51,9 +51,9 @@ def self.find_for_oauth2(access_token) unless user if User.where(email: data["email"]).first - "dup" + user = "duplicated" else - nil + user = nil end end user @@ -77,6 +77,10 @@ def update_from_twitter(id, email) user.save! end - + def password_required? + if provider.nil? + super + end + end end From fc7eab647e5cd18deedea162c9ad495d4c2703bf Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 27 Aug 2014 02:41:10 +0900 Subject: [PATCH 16/23] =?UTF-8?q?=EB=9D=BC=EC=9A=B0=ED=8C=85=EC=9D=84=20re?= =?UTF-8?q?sourceful=ED=95=98=EA=B2=8C=20=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 10 +++++----- app/controllers/users_controller.rb | 2 +- app/views/users/merge.html.erb | 2 +- .../new.html.erb => nickname_new.html.erb} | 0 config/routes.rb | 16 +++++++++------- 5 files changed, 16 insertions(+), 14 deletions(-) rename app/views/users/{nickname/new.html.erb => nickname_new.html.erb} (100%) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 290a491..1a79511 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -5,9 +5,9 @@ def facebook session["omniauth"] = request.env["omniauth.auth"] if @user.nil? - render users_nickname_new_path + render nickname_new_users_path elsif @user == "duplicated" - redirect_to users_merge_path + redirect_to merge_users_path else sign_in_and_redirect @user, :event => :authentication end @@ -19,9 +19,9 @@ def google_oauth2 session["omniauth"] = request.env["omniauth.auth"] if @user.nil? - render users_nickname_new_path + render nickname_new_users_path elsif @user == "duplicated" - redirect_to users_merge_path + redirect_to merge_users_path else sign_in_and_redirect @user, :event => :authentication end @@ -33,7 +33,7 @@ def twitter if @user.nil? @user = User.new session["omniauth"] = request.env["omniauth.auth"] - render sign_up_from_twitter_path + render sign_up_from_twitter_users_path else sign_in_and_redirect @user, :event => :authentication end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 136a183..1ecb905 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -39,7 +39,7 @@ def sign_up_from_twitter def sign_up_from_twitter_callback if User.where(email: params[:user]["email"]).first @user = User.new - render sign_up_from_twitter_path + render sign_up_from_twitter_users_path else auth = session["omniauth"] diff --git a/app/views/users/merge.html.erb b/app/views/users/merge.html.erb index 5b18726..0725e69 100644 --- a/app/views/users/merge.html.erb +++ b/app/views/users/merge.html.erb @@ -3,7 +3,7 @@

이 아이디와 통합하려면 기존 계정의 패스워드를 입력하세요

-<%= form_tag({controller: "users", action: "merge_callback"}, method: "get") do %> +<%= form_tag({controller: "users", action: "merge_callback"}, method: "post") do %> <%= password_field_tag(:password) %> <%= submit_tag("Submit", class: "btn btn-primary") %> diff --git a/app/views/users/nickname/new.html.erb b/app/views/users/nickname_new.html.erb similarity index 100% rename from app/views/users/nickname/new.html.erb rename to app/views/users/nickname_new.html.erb diff --git a/config/routes.rb b/config/routes.rb index 8f310be..c43593a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -5,15 +5,17 @@ :sessions => "users/sessions" } - controller :users do - get 'users/sign_up_from_twitter', action: 'sign_up_from_twitter', as: 'sign_up_from_twitter' - post 'users/sign_up_from_twitter_callback', action: 'sign_up_from_twitter_callback', as: 'sign_up_from_twitter_callback' + resources :users, only: :index do + collection do + get 'sign_up_from_twitter' + post 'sign_up_from_twitter_callback' - get 'users/merge', action: 'merge', as: 'users_merge' - get 'users/merge/callback', action: 'merge_callback', as: 'users_merge_callback' + get 'merge' + post 'merge_callback' - get 'users/nickname/new', action: 'nickname_new' - post 'users/nickname/new/callback', action: 'nickname_new_callback' + get 'nickname_new' + post 'nickname_new_callback' + end end get '/users/(/:nickname)', to: 'users#show', as: 'show_user' From 8cb2434ce536c7707dc05a18db89c7b32d62f766 Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 27 Aug 2014 07:57:05 +0900 Subject: [PATCH 17/23] =?UTF-8?q?User=20class=EC=97=90=20duplicated=3F=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users/omniauth_callbacks_controller.rb | 4 ++-- app/models/user.rb | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 1a79511..08a8a46 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -6,7 +6,7 @@ def facebook if @user.nil? render nickname_new_users_path - elsif @user == "duplicated" + elsif @user.duplicated? redirect_to merge_users_path else sign_in_and_redirect @user, :event => :authentication @@ -20,7 +20,7 @@ def google_oauth2 if @user.nil? render nickname_new_users_path - elsif @user == "duplicated" + elsif @user.duplicated? redirect_to merge_users_path else sign_in_and_redirect @user, :event => :authentication diff --git a/app/models/user.rb b/app/models/user.rb index f320b20..3be2017 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -51,7 +51,7 @@ def self.find_for_oauth2(access_token) unless user if User.where(email: data["email"]).first - user = "duplicated" + user = User.new(email: data["email"]) else user = nil end @@ -83,4 +83,8 @@ def password_required? end end + def duplicated? + User.where(email: email, id: nil) + end + end From 7ea7721e875a9c98539de4b1b5bc25e790d83db1 Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 27 Aug 2014 08:09:09 +0900 Subject: [PATCH 18/23] =?UTF-8?q?=EC=84=B8=EC=85=98=20=ED=81=AC=EA=B8=B0?= =?UTF-8?q?=20=EC=A1=B0=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 20 ++++++++++++++++--- app/controllers/users_controller.rb | 8 ++++---- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 08a8a46..2ec8bac 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -2,7 +2,11 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def facebook @user = User.find_for_oauth2(request.env["omniauth.auth"]) - session["omniauth"] = request.env["omniauth.auth"] + session["omniauth"] = { + provider: request.env["omniauth.auth"].provider, + uid: request.env["omniauth.auth"].uid, + email: request.env["omniauth.auth"]["info"].email + } if @user.nil? render nickname_new_users_path @@ -16,7 +20,11 @@ def facebook def google_oauth2 @user = User.find_for_oauth2(request.env["omniauth.auth"]) - session["omniauth"] = request.env["omniauth.auth"] + session["omniauth"] = { + provider: request.env["omniauth.auth"].provider, + uid: request.env["omniauth.auth"].uid, + email: request.env["omniauth.auth"]["info"].email + } if @user.nil? render nickname_new_users_path @@ -32,7 +40,13 @@ def twitter if @user.nil? @user = User.new - session["omniauth"] = request.env["omniauth.auth"] + + session["omniauth"] = { + provider: request.env["omniauth.auth"].provider, + uid: request.env["omniauth.auth"].uid, + nickname: request.env["omniauth.auth"]["extra"]["raw_info"].screen_name + } + render sign_up_from_twitter_users_path else sign_in_and_redirect @user, :event => :authentication diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 1ecb905..2846097 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -5,12 +5,12 @@ def show end def merge - @user = User.where(email: session["omniauth"]["info"]["email"]).first + @user = User.where(email: session["omniauth"]["email"]).first end def merge_callback auth = session["omniauth"] - @user = User.where(email: auth["info"]["email"]).first + @user = User.where(email: auth["email"]).first if @user.valid_password?(params[:password]) @user.merge(@user.id, auth["provider"], auth["uid"]) @@ -28,7 +28,7 @@ def nickname_new_callback @user = User.create!(provider:auth["provider"], uid: auth["uid"], - email: auth["info"]["email"], + email: auth["email"], nickname: params[:nickname]) sign_in_and_redirect @user, :event => :authentication end @@ -45,7 +45,7 @@ def sign_up_from_twitter_callback @user = User.new(provider:auth["provider"], uid:auth["uid"], - nickname: auth["extra"]["raw_info"]["screen_name"]) + nickname: auth["nickname"]) @user.email = params[:user]["email"] From 68e7e634e4fd0a99a3409d9b72df721522fec822 Mon Sep 17 00:00:00 2001 From: minhyeok92 Date: Wed, 27 Aug 2014 13:14:36 +0900 Subject: [PATCH 19/23] =?UTF-8?q?#76=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 10 ++-- app/controllers/users_controller.rb | 32 ++++++------- app/models/user.rb | 47 +++++++++---------- app/views/users/merge.html.erb | 10 +++- app/views/users/nickname_new.html.erb | 15 ++++-- app/views/users/sign_up_from_twitter.html.erb | 20 ++++---- 6 files changed, 77 insertions(+), 57 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 2ec8bac..e4679e4 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -8,10 +8,11 @@ def facebook email: request.env["omniauth.auth"]["info"].email } - if @user.nil? + if @user.first_login? render nickname_new_users_path elsif @user.duplicated? - redirect_to merge_users_path + @user = User.find_by_email(session["omniauth"][:email]) + render merge_users_path else sign_in_and_redirect @user, :event => :authentication end @@ -26,10 +27,11 @@ def google_oauth2 email: request.env["omniauth.auth"]["info"].email } - if @user.nil? + if @user.first_login? render nickname_new_users_path elsif @user.duplicated? - redirect_to merge_users_path + @user = User.find_by_email(session["omniauth"][:email]) + render merge_users_path else sign_in_and_redirect @user, :event => :authentication end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 2846097..191dc1b 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -5,15 +5,14 @@ def show end def merge - @user = User.where(email: session["omniauth"]["email"]).first end def merge_callback - auth = session["omniauth"] - @user = User.where(email: auth["email"]).first + @user = User.find_by_email(params[:email]) if @user.valid_password?(params[:password]) - @user.merge(@user.id, auth["provider"], auth["uid"]) + @user.merge(@user.id, params[:provider], params[:uid]) + sign_in_and_redirect @user, :event => :authentication else redirect_to root_path @@ -24,12 +23,13 @@ def nickname_new end def nickname_new_callback - auth = session["omniauth"] + @user = User.create!( + provider: params[:provider], + uid: params[:uid], + email: params[:email], + nickname: params[:nickname] + ) - @user = User.create!(provider:auth["provider"], - uid: auth["uid"], - email: auth["email"], - nickname: params[:nickname]) sign_in_and_redirect @user, :event => :authentication end @@ -37,17 +37,17 @@ def sign_up_from_twitter end def sign_up_from_twitter_callback - if User.where(email: params[:user]["email"]).first + if User.find_by_email(params[:user][:email]) @user = User.new render sign_up_from_twitter_users_path else - auth = session["omniauth"] - - @user = User.new(provider:auth["provider"], - uid:auth["uid"], - nickname: auth["nickname"]) + @user = User.new( + provider: params[:user][:provider], + uid: params[:user][:uid], + nickname: params[:user][:nickname] + ) - @user.email = params[:user]["email"] + @user.email = params[:user][:email] @user.save! sign_in_and_redirect @user, :event => :authentication diff --git a/app/models/user.rb b/app/models/user.rb index 3be2017..ff0ce99 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -25,35 +25,21 @@ def to_param end def self.find_by_nickname(nickname) - user = User.where(:nickname => nickname).first - end - - def self.from_omniauth(auth) - - where(auth.slice(:provider, :uid)).first_or_create do |user| - user.email = auth.info.email - user.password = Devise.friendly_token[0,20] - user.nickname = auth.info.name - end - end - - def self.new_with_session(params, session) - super.tap do |user| - if data = session["omniauth"] && session["omniauth"]["extra"]["raw_info"] - user.email = data["email"] if user.email.blank? - end - end + user = User.where(nickname: nickname).first end def self.find_for_oauth2(access_token) data = access_token.info + user = User.where(provider: access_token.provider, uid: access_token.uid).first unless user - if User.where(email: data["email"]).first - user = User.new(email: data["email"]) + user = User.new + + if User.find_by_email(data[:email]) + user.duplicated! else - user = nil + user.first_login! end end user @@ -65,14 +51,14 @@ def self.find_for_twitter_oauth(auth) end def merge(id, provider, uid) - user = User.where(:id => id).first + user = User.find(id) user.provider = provider user.uid = uid user.save! end def update_from_twitter(id, email) - user = User.where(:id => id).first + user = User.find(id) user.email = email user.save! end @@ -83,8 +69,21 @@ def password_required? end end + def duplicated! + @duplicated = true + end + def duplicated? - User.where(email: email, id: nil) + @duplicated end + def first_login? + @first_login + end + + def first_login! + @first_login = true + end + + end diff --git a/app/views/users/merge.html.erb b/app/views/users/merge.html.erb index 0725e69..8e6b042 100644 --- a/app/views/users/merge.html.erb +++ b/app/views/users/merge.html.erb @@ -1,10 +1,16 @@

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

- +<%= @user.inspect %>

이 아이디와 통합하려면 기존 계정의 패스워드를 입력하세요

-<%= form_tag({controller: "users", action: "merge_callback"}, method: "post") do %> +<%= form_tag(merge_callback_users_path, method: "post") do %> <%= password_field_tag(:password) %> + + <%= auth = session["omniauth"] %> + <%= hidden_field_tag(:provider, auth[:provider]) %> + <%= hidden_field_tag(:uid, auth[:uid]) %> + <%= hidden_field_tag(:email, auth[:email]) %> + <%= submit_tag("Submit", class: "btn btn-primary") %> <% end %> \ No newline at end of file diff --git a/app/views/users/nickname_new.html.erb b/app/views/users/nickname_new.html.erb index e59729d..e969172 100644 --- a/app/views/users/nickname_new.html.erb +++ b/app/views/users/nickname_new.html.erb @@ -1,8 +1,17 @@ -<%= form_tag({controller: "/users", action: "nickname_new_callback"}, method: "post") do %> +<%= form_tag(nickname_new_callback_users_path, method: "post") do %> -

처음이십니다. 새로운 닉네임을 입력하세요

-<%= text_field_tag(:nickname) %> +

처음이십니다. 새로운 닉네임을 입력하세요

+ + <%= text_field_tag(:nickname) %> + + + <% auth = session["omniauth"] %> + <%= hidden_field_tag(:provider, auth[:provider]) %> + <%= hidden_field_tag(:uid, auth[:uid]) %> + <%= hidden_field_tag(:email, auth[:email]) %> + + <%= submit_tag("Submit", class: "btn btn-primary") %> <% end %> diff --git a/app/views/users/sign_up_from_twitter.html.erb b/app/views/users/sign_up_from_twitter.html.erb index 12687c8..cf58665 100644 --- a/app/views/users/sign_up_from_twitter.html.erb +++ b/app/views/users/sign_up_from_twitter.html.erb @@ -1,15 +1,19 @@

새 이메일을 입력하세요 - Twitter

-
- <%= form_for @user, url: {action: "sign_up_from_twitter_callback", controller: "/users"}, method: "post", :role => 'form' do |f|%> + <%= form_for @user, url: sign_up_from_twitter_callback_users_path, method: "post" do |f| %> + +
+ <%= f.label :email %> + <%= f.email_field :email, autofocus: true, class: "form-control" %> +
-
- <%= f.label :email %> - <%= f.email_field :email, autofocus: true, class: "form-control" %> -
+ <% auth = session["omniauth"] %> + <%= f.hidden_field :provider, value: auth[:provider] %> + <%= f.hidden_field :uid, value: auth[:uid] %> + <%= f.hidden_field :nickname, value: auth[:nickname] %> - <%= f.submit :class => 'btn btn-success'%> + <%= f.submit :class => 'btn btn-success'%> - <% end %> + <% end %>
From ab021799da3c1399145fc87faa1418ada7013913 Mon Sep 17 00:00:00 2001 From: minhyeok Date: Wed, 27 Aug 2014 17:56:59 +0900 Subject: [PATCH 20/23] =?UTF-8?q?#76=207~9=EB=B2=88=20=EB=A6=AC=ED=8C=A9?= =?UTF-8?q?=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 93 +++++++++---------- app/models/user.rb | 53 ++++------- app/views/users/merge.html.erb | 8 +- app/views/users/nickname_new.html.erb | 7 +- app/views/users/sign_up_from_twitter.html.erb | 7 +- 5 files changed, 68 insertions(+), 100 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index e4679e4..719ff58 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -1,57 +1,48 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController - def facebook - @user = User.find_for_oauth2(request.env["omniauth.auth"]) - - session["omniauth"] = { - provider: request.env["omniauth.auth"].provider, - uid: request.env["omniauth.auth"].uid, - email: request.env["omniauth.auth"]["info"].email + def self.provides_callback_for(provider) + class_eval %Q{ + def #{provider} + @provider = "#{provider}" + @uid = request.env["omniauth.auth"].uid + result = User.find_for_oauth(@provider, request.env["omniauth.auth"]) + + case @provider + when "twitter" + @nickname = request.env["omniauth.auth"]["extra"]["raw_info"].screen_name + + case result[:status] + when :success + @user = result[:data] + sign_in_and_redirect @user, :event => :authentication + + when :first_login + @user = User.new + render sign_up_from_twitter_users_path + end + + else + @email = request.env["omniauth.auth"]["info"].email + + case result[:status] + when :success + @user = result[:data] + sign_in_and_redirect @user, :event => :authentication + + when :first_login + @user = User.new + render nickname_new_users_path + + when :duplicated + @user = User.find_by_email(@email) + render merge_users_path + end + + end + end } - - if @user.first_login? - render nickname_new_users_path - elsif @user.duplicated? - @user = User.find_by_email(session["omniauth"][:email]) - render merge_users_path - else - sign_in_and_redirect @user, :event => :authentication - end end - def google_oauth2 - @user = User.find_for_oauth2(request.env["omniauth.auth"]) - - session["omniauth"] = { - provider: request.env["omniauth.auth"].provider, - uid: request.env["omniauth.auth"].uid, - email: request.env["omniauth.auth"]["info"].email - } - - if @user.first_login? - render nickname_new_users_path - elsif @user.duplicated? - @user = User.find_by_email(session["omniauth"][:email]) - render merge_users_path - else - sign_in_and_redirect @user, :event => :authentication - end - end - - def twitter - @user = User.find_for_twitter_oauth(request.env["omniauth.auth"]) - - if @user.nil? - @user = User.new - - session["omniauth"] = { - provider: request.env["omniauth.auth"].provider, - uid: request.env["omniauth.auth"].uid, - nickname: request.env["omniauth.auth"]["extra"]["raw_info"].screen_name - } - - render sign_up_from_twitter_users_path - else - sign_in_and_redirect @user, :event => :authentication - end + [:twitter, :facebook, :google_oauth2].each do |provider| + provides_callback_for provider end end diff --git a/app/models/user.rb b/app/models/user.rb index ff0ce99..d7b210d 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -18,8 +18,6 @@ class User < ActiveRecord::Base validates_presence_of :nickname validates_uniqueness_of :nickname - - def to_param nickname end @@ -28,26 +26,27 @@ def self.find_by_nickname(nickname) user = User.where(nickname: nickname).first end - def self.find_for_oauth2(access_token) - data = access_token.info - - user = User.where(provider: access_token.provider, uid: access_token.uid).first - - unless user - user = User.new - - if User.find_by_email(data[:email]) - user.duplicated! + def self.find_for_oauth(provider, access_token) + case provider + when "twitter" + if user = User.where(uid: access_token.uid, provider: access_token.provider).first + return {data: user, status: :success} else - user.first_login! + return {data: nil, status: :first_login} end - end - user - end + else + email = access_token.info[:email] + + if user = User.where(uid: access_token.uid, provider: access_token.provider).first + return {data: user, status: :success} + elsif User.find_by_email(email) + return {data: nil, status: :duplicated} + else + return {data: nil, status: :first_login} + end - def self.find_for_twitter_oauth(auth) - user = User.where(:uid => auth.uid, :provider => auth.provider).first + end end def merge(id, provider, uid) @@ -68,22 +67,4 @@ def password_required? super end end - - def duplicated! - @duplicated = true - end - - def duplicated? - @duplicated - end - - def first_login? - @first_login - end - - def first_login! - @first_login = true - end - - end diff --git a/app/views/users/merge.html.erb b/app/views/users/merge.html.erb index 8e6b042..efb8412 100644 --- a/app/views/users/merge.html.erb +++ b/app/views/users/merge.html.erb @@ -1,15 +1,13 @@

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

-<%= @user.inspect %>

이 아이디와 통합하려면 기존 계정의 패스워드를 입력하세요

<%= form_tag(merge_callback_users_path, method: "post") do %> <%= password_field_tag(:password) %> - <%= auth = session["omniauth"] %> - <%= hidden_field_tag(:provider, auth[:provider]) %> - <%= hidden_field_tag(:uid, auth[:uid]) %> - <%= hidden_field_tag(:email, auth[:email]) %> + <%= hidden_field_tag(:provider, @provider) %> + <%= hidden_field_tag(:uid, @uid) %> + <%= hidden_field_tag(:email, @email) %> <%= submit_tag("Submit", class: "btn btn-primary") %> diff --git a/app/views/users/nickname_new.html.erb b/app/views/users/nickname_new.html.erb index e969172..7cdbf1d 100644 --- a/app/views/users/nickname_new.html.erb +++ b/app/views/users/nickname_new.html.erb @@ -6,10 +6,9 @@ <%= text_field_tag(:nickname) %> - <% auth = session["omniauth"] %> - <%= hidden_field_tag(:provider, auth[:provider]) %> - <%= hidden_field_tag(:uid, auth[:uid]) %> - <%= hidden_field_tag(:email, auth[:email]) %> + <%= hidden_field_tag(:provider, @provider) %> + <%= hidden_field_tag(:uid, @uid) %> + <%= hidden_field_tag(:email, @email) %> <%= submit_tag("Submit", class: "btn btn-primary") %> diff --git a/app/views/users/sign_up_from_twitter.html.erb b/app/views/users/sign_up_from_twitter.html.erb index cf58665..8b9cac7 100644 --- a/app/views/users/sign_up_from_twitter.html.erb +++ b/app/views/users/sign_up_from_twitter.html.erb @@ -8,10 +8,9 @@ <%= f.email_field :email, autofocus: true, class: "form-control" %>
- <% auth = session["omniauth"] %> - <%= f.hidden_field :provider, value: auth[:provider] %> - <%= f.hidden_field :uid, value: auth[:uid] %> - <%= f.hidden_field :nickname, value: auth[:nickname] %> + <%= f.hidden_field :provider, value: @provider %> + <%= f.hidden_field :uid, value: @uid %> + <%= f.hidden_field :nickname, value: @nickname %> <%= f.submit :class => 'btn btn-success'%> From 9166136cf37ef1f2d7cab38e9c08049f2d3a6729 Mon Sep 17 00:00:00 2001 From: minhyeok Date: Fri, 29 Aug 2014 01:10:44 +0900 Subject: [PATCH 21/23] =?UTF-8?q?#76=20=EB=8B=A4=EC=96=91=ED=95=9C=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=EC=82=AC=ED=95=AD=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile | 3 + Gemfile.lock | 5 + .../users/omniauth_callbacks_controller.rb | 91 ++++++++++--------- app/controllers/users_controller.rb | 52 +++++------ app/models/user.rb | 8 +- app/views/devise/registrations/edit.html.erb | 11 ++- app/views/devise/sessions/new.html.erb | 9 ++ app/views/users/merge.html.erb | 28 ++++-- app/views/users/nickname_new.html.erb | 24 +++-- app/views/users/sign_up_from_twitter.html.erb | 13 ++- 10 files changed, 149 insertions(+), 95 deletions(-) diff --git a/Gemfile b/Gemfile index 4b76b46..84f46cd 100644 --- a/Gemfile +++ b/Gemfile @@ -56,6 +56,9 @@ gem 'rabl-rails' gem 'omniauth-facebook' gem 'omniauth-google-oauth2' gem 'omniauth-twitter' +gem 'dynamic_form' + +gem 'quiet_assets', group: :development group :production do gem 'rails_12factor' diff --git a/Gemfile.lock b/Gemfile.lock index fb3a8c1..4e01d24 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -54,6 +54,7 @@ GEM railties (>= 3.2.6, < 5) thread_safe (~> 0.1) warden (~> 1.2.3) + dynamic_form (1.1.4) erubis (2.7.0) execjs (2.2.1) faraday (0.9.0) @@ -116,6 +117,8 @@ GEM orm_adapter (0.5.0) pg (0.17.1) polyglot (0.3.5) + quiet_assets (1.0.3) + railties (>= 3.1, < 5.0) rabl-rails (0.3.4) activesupport (>= 3.1) railties (>= 3.1) @@ -198,6 +201,7 @@ DEPENDENCIES cloudinary coffee-rails (~> 4.0.0) devise + dynamic_form gon jbuilder (~> 2.0) jquery-rails @@ -207,6 +211,7 @@ DEPENDENCIES omniauth-google-oauth2 omniauth-twitter pg + quiet_assets rabl-rails rails (= 4.1.4) rails_12factor diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index 719ff58..ba6108c 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -1,48 +1,55 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController - def self.provides_callback_for(provider) - class_eval %Q{ - def #{provider} - @provider = "#{provider}" - @uid = request.env["omniauth.auth"].uid - result = User.find_for_oauth(@provider, request.env["omniauth.auth"]) - - case @provider - when "twitter" - @nickname = request.env["omniauth.auth"]["extra"]["raw_info"].screen_name - - case result[:status] - when :success - @user = result[:data] - sign_in_and_redirect @user, :event => :authentication - - when :first_login - @user = User.new - render sign_up_from_twitter_users_path - end - - else - @email = request.env["omniauth.auth"]["info"].email - - case result[:status] - when :success - @user = result[:data] - sign_in_and_redirect @user, :event => :authentication - - when :first_login - @user = User.new - render nickname_new_users_path - - when :duplicated - @user = User.find_by_email(@email) - render merge_users_path - end - - end + def authenticate(provider) + @user = User.new( + provider: provider, + uid: request.env["omniauth.auth"].uid) + + result = User.find_for_oauth(provider, request.env["omniauth.auth"]) + + case provider + when :twitter + @user.nickname = request.env["omniauth.auth"]["extra"]["raw_info"].screen_name + + case result[:status] + when :success + @user = result[:data] + sign_in_and_redirect @user, :event => :authentication + + when :first_login + render sign_up_from_twitter_users_path + end + + else + @user.email = request.env["omniauth.auth"]["info"].email + + case result[:status] + when :success + @user = result[:data] + sign_in_and_redirect @user, :event => :authentication + + when :first_login + render nickname_new_users_path + + when :duplicated + @user = User.find_by_email(@user.email) + render merge_users_path + + when :duplicated_by_oauth + flash[:notice] = result[:data] + " 서비스로 이미 회원가입 되어있습니다. 해당 서비스로 로그인해주세요" + redirect_to new_user_session_path end - } + end + end + + def twitter + authenticate(:twitter) + end + + def facebook + authenticate(:facebook) end - [:twitter, :facebook, :google_oauth2].each do |provider| - provides_callback_for provider + def google_oauth2 + authenticate(:google_oauth2) end end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 191dc1b..68cd7e1 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -8,49 +8,45 @@ def merge end def merge_callback - @user = User.find_by_email(params[:email]) - - if @user.valid_password?(params[:password]) - @user.merge(@user.id, params[:provider], params[:uid]) - sign_in_and_redirect @user, :event => :authentication + @user = User.find_by_email(params[:user].permit![:email]) + + if @user.valid_password?(params[:user].permit![:password]) + if @user.merge(@user.id, params[:user].permit![:provider], params[:user].permit![:uid]) + sign_in_and_redirect @user, :event => :authentication + else + render merge_users_path + end else - redirect_to root_path - end + flash[:notice] = "Password is not valid!" + render merge_users_path + end end def nickname_new end def nickname_new_callback - @user = User.create!( - provider: params[:provider], - uid: params[:uid], - email: params[:email], - nickname: params[:nickname] - ) - - sign_in_and_redirect @user, :event => :authentication + @user = User.new(params[:user].permit!) + + if @user.save + sign_in_and_redirect @user, :event => :authentication + else + render nickname_new_users_path + end + end def sign_up_from_twitter end def sign_up_from_twitter_callback - if User.find_by_email(params[:user][:email]) - @user = User.new - render sign_up_from_twitter_users_path - else - @user = User.new( - provider: params[:user][:provider], - uid: params[:user][:uid], - nickname: params[:user][:nickname] - ) + @user = User.new(params[:user].permit!) - @user.email = params[:user][:email] - - @user.save! + if @user.save sign_in_and_redirect @user, :event => :authentication - end + else + render sign_up_from_twitter_users_path + end end end diff --git a/app/models/user.rb b/app/models/user.rb index d7b210d..b8b187c 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -40,8 +40,12 @@ def self.find_for_oauth(provider, access_token) if user = User.where(uid: access_token.uid, provider: access_token.provider).first return {data: user, status: :success} - elsif User.find_by_email(email) - return {data: nil, status: :duplicated} + elsif user = User.find_by_email(email) + if user.provider.nil? + return {data: nil, status: :duplicated} + else + return {data: user.provider, status: :duplicated_by_oauth} + end else return {data: nil, status: :first_login} end diff --git a/app/views/devise/registrations/edit.html.erb b/app/views/devise/registrations/edit.html.erb index 6bc5870..cbd7565 100644 --- a/app/views/devise/registrations/edit.html.erb +++ b/app/views/devise/registrations/edit.html.erb @@ -6,10 +6,7 @@ <%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> <%= devise_error_messages! %> -
- <%= f.label :email %> - <%= f.email_field :email, autofocus: true, class: "form-control" %> -
+ <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
Currently waiting confirmation for: <%= resource.unconfirmed_email %>
@@ -21,6 +18,12 @@
<% if current_user.provider == nil %> + +
+ <%= f.label :email %> + <%= f.email_field :email, autofocus: true, class: "form-control" %> +
+
<%= f.label :password %> (leave blank if you don't want to change it) <%= f.password_field :password, autocomplete: "off", class: "form-control" %> diff --git a/app/views/devise/sessions/new.html.erb b/app/views/devise/sessions/new.html.erb index afc9e02..629b17a 100644 --- a/app/views/devise/sessions/new.html.erb +++ b/app/views/devise/sessions/new.html.erb @@ -3,7 +3,12 @@

Sign in

+ + <%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> + + +
<%= f.label :email %> <%= f.email_field :email, autofocus: true, class: "form-control" %> @@ -34,5 +39,9 @@
<%= render "devise/shared/links" %>
+ + <% if flash[:notice] %> +

<%= flash[:notice] %>

+ <% end %>
diff --git a/app/views/users/merge.html.erb b/app/views/users/merge.html.erb index efb8412..a645d7c 100644 --- a/app/views/users/merge.html.erb +++ b/app/views/users/merge.html.erb @@ -2,13 +2,25 @@

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

이 아이디와 통합하려면 기존 계정의 패스워드를 입력하세요

-<%= form_tag(merge_callback_users_path, method: "post") do %> - <%= password_field_tag(:password) %> - - <%= hidden_field_tag(:provider, @provider) %> - <%= hidden_field_tag(:uid, @uid) %> - <%= hidden_field_tag(:email, @email) %> +
+<%= form_for @user, url: merge_callback_users_path, method: "post" do |f| %> - <%= submit_tag("Submit", class: "btn btn-primary") %> + <%= f.error_messages %> + + <% if flash[:notice] %> +

<%= flash[:notice] %>

+ <% end %> + +
+ <%= f.label :password %> + <%= f.password_field :password, autofocus: true, class: "form-control" %> +
+ + <%= f.hidden_field :provider, value: @user.provider %> + <%= f.hidden_field :uid, value: @user.uid %> + <%= f.hidden_field :email, value: @user.email %> -<% end %> \ No newline at end of file + <%= f.submit "Submit", class: "btn btn-primary" %> + +<% end %> +
\ No newline at end of file diff --git a/app/views/users/nickname_new.html.erb b/app/views/users/nickname_new.html.erb index 7cdbf1d..ed3d31f 100644 --- a/app/views/users/nickname_new.html.erb +++ b/app/views/users/nickname_new.html.erb @@ -1,16 +1,24 @@ - -<%= form_tag(nickname_new_callback_users_path, method: "post") do %> +
+<%= form_for @user, url: nickname_new_callback_users_path, method: "post" do |f| %>

처음이십니다. 새로운 닉네임을 입력하세요

- <%= text_field_tag(:nickname) %> + <%= f.error_messages %> + <% if flash[:notice] %> +

<%= flash[:notice] %>

+ <% end %> - <%= hidden_field_tag(:provider, @provider) %> - <%= hidden_field_tag(:uid, @uid) %> - <%= hidden_field_tag(:email, @email) %> +
+ <%= f.label :nickname %> + <%= f.text_field :nickname, autofocus: true, class: "form-control" %> +
+ <%= f.hidden_field :provider, value: @user.provider %> + <%= f.hidden_field :uid, value: @user.uid %> + <%= f.hidden_field :email, value: @user.email %> + + <%= f.submit "Submit", class: "btn btn-primary" %> - <%= submit_tag("Submit", class: "btn btn-primary") %> <% end %> - +
\ No newline at end of file diff --git a/app/views/users/sign_up_from_twitter.html.erb b/app/views/users/sign_up_from_twitter.html.erb index 8b9cac7..bde6b00 100644 --- a/app/views/users/sign_up_from_twitter.html.erb +++ b/app/views/users/sign_up_from_twitter.html.erb @@ -1,16 +1,23 @@

새 이메일을 입력하세요 - Twitter

+
<%= form_for @user, url: sign_up_from_twitter_callback_users_path, method: "post" do |f| %> + <%= f.error_messages %> + + <% if flash[:notice] %> +

<%= flash[:notice] %>

+ <% end %> +
<%= f.label :email %> <%= f.email_field :email, autofocus: true, class: "form-control" %>
- <%= f.hidden_field :provider, value: @provider %> - <%= f.hidden_field :uid, value: @uid %> - <%= f.hidden_field :nickname, value: @nickname %> + <%= f.hidden_field :provider, value: @user.provider %> + <%= f.hidden_field :uid, value: @user.uid %> + <%= f.hidden_field :nickname, value: @user.nickname %> <%= f.submit :class => 'btn btn-success'%> From 5d0d37c44fca2f80fa92e64725ea47ab88a0f090 Mon Sep 17 00:00:00 2001 From: minhyeok Date: Sun, 31 Aug 2014 01:12:08 +0900 Subject: [PATCH 22/23] =?UTF-8?q?=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../users/omniauth_callbacks_controller.rb | 3 +++ app/controllers/users_controller.rb | 6 +++--- app/views/users/sign_up_from_twitter.html.erb | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/controllers/users/omniauth_callbacks_controller.rb b/app/controllers/users/omniauth_callbacks_controller.rb index ba6108c..eccf2c8 100644 --- a/app/controllers/users/omniauth_callbacks_controller.rb +++ b/app/controllers/users/omniauth_callbacks_controller.rb @@ -32,6 +32,9 @@ def authenticate(provider) when :duplicated @user = User.find_by_email(@user.email) + @user.provider = provider + @user.uid = request.env["omniauth.auth"].uid + render merge_users_path when :duplicated_by_oauth diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 68cd7e1..4a8a39c 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -9,10 +9,10 @@ def merge def merge_callback - @user = User.find_by_email(params[:user].permit![:email]) + @user = User.find_by_email(params[:user].permit[:email]) - if @user.valid_password?(params[:user].permit![:password]) - if @user.merge(@user.id, params[:user].permit![:provider], params[:user].permit![:uid]) + if @user.valid_password?(params[:user].permit[:password]) + if @user.merge(@user.id, params[:user].permit[:provider], params[:user].permit[:uid]) sign_in_and_redirect @user, :event => :authentication else render merge_users_path diff --git a/app/views/users/sign_up_from_twitter.html.erb b/app/views/users/sign_up_from_twitter.html.erb index bde6b00..740ece8 100644 --- a/app/views/users/sign_up_from_twitter.html.erb +++ b/app/views/users/sign_up_from_twitter.html.erb @@ -6,6 +6,7 @@ <%= f.error_messages %> + <% if flash[:notice] %>

<%= flash[:notice] %>

<% end %> @@ -15,9 +16,18 @@ <%= f.email_field :email, autofocus: true, class: "form-control" %>
+ <% if f.error_message_on(:nickname) == "" %> + <%= f.hidden_field :nickname, value: @user.nickname %> + <% else %> +
+ <%= f.label :nickname %> + <%= f.text_field :nickname, autofocus: true, class: "form-control" %> +
+ <% end %> + + <%= f.hidden_field :provider, value: @user.provider %> - <%= f.hidden_field :uid, value: @user.uid %> - <%= f.hidden_field :nickname, value: @user.nickname %> + <%= f.hidden_field :uid, value: @user.uid %> <%= f.submit :class => 'btn btn-success'%> From cc965baaba8e2176ffeea112ec0554b6f973db85 Mon Sep 17 00:00:00 2001 From: minhyeok Date: Mon, 1 Sep 2014 19:23:42 +0900 Subject: [PATCH 23/23] =?UTF-8?q?=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 8 +++++--- app/models/user.rb | 7 ------- app/views/users/sign_up_from_twitter.html.erb | 2 +- 3 files changed, 6 insertions(+), 11 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 4a8a39c..2691836 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -9,10 +9,12 @@ def merge def merge_callback - @user = User.find_by_email(params[:user].permit[:email]) + @user = User.find_by_email(params[:user][:email]) + @user.provider = params[:user][:provider] + @user.uid = params[:user][:uid] - if @user.valid_password?(params[:user].permit[:password]) - if @user.merge(@user.id, params[:user].permit[:provider], params[:user].permit[:uid]) + if @user.valid_password?(params[:user][:password]) + if @user.save sign_in_and_redirect @user, :event => :authentication else render merge_users_path diff --git a/app/models/user.rb b/app/models/user.rb index b8b187c..129cea4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -53,13 +53,6 @@ def self.find_for_oauth(provider, access_token) end end - def merge(id, provider, uid) - user = User.find(id) - user.provider = provider - user.uid = uid - user.save! - end - def update_from_twitter(id, email) user = User.find(id) user.email = email diff --git a/app/views/users/sign_up_from_twitter.html.erb b/app/views/users/sign_up_from_twitter.html.erb index 740ece8..0cfeef8 100644 --- a/app/views/users/sign_up_from_twitter.html.erb +++ b/app/views/users/sign_up_from_twitter.html.erb @@ -16,7 +16,7 @@ <%= f.email_field :email, autofocus: true, class: "form-control" %>
- <% if f.error_message_on(:nickname) == "" %> + <% if f.error_message_on(:nickname).blank? %> <%= f.hidden_field :nickname, value: @user.nickname %> <% else %>