@@ -5,32 +5,43 @@ def show
55 end
66
77 def merge
8- @user = User . find ( params [ :id ] )
98 @provider = params [ :provider ]
9+ @user = User . where ( email : session [ "devise." + @provider + "_data" ] [ "info" ] [ "email" ] ) . first
1010
11- if params [ :callback ] == 'callback'
12- provider_session = session [ "devise." + @provider ]
11+ end
1312
14- @user . merge ( params [ :id ] , provider_session [ "provider" ] , provider_session [ "uid" ] )
13+ def merge_callback
14+ @provider = params [ :provider ]
15+ provider_session = session [ "devise." + @provider + "_data" ]
16+ @user = User . where ( email : provider_session [ "info" ] [ "email" ] ) . first
17+
18+ if @user . valid_password? ( params [ :password ] )
19+ @user . merge ( @user . id , provider_session [ "provider" ] , provider_session [ "uid" ] )
20+ sign_in_and_redirect @user , :event => :authentication
21+ else
1522 redirect_to root_path
16- end
17-
23+ end
1824 end
1925
2026 def sign_up_from_twitter
2127 end
2228
2329 def sign_up_from_twitter_callback
24- auth = session [ "devise.twitter_data" ]
25-
26- @user = User . new ( provider :auth [ "provider" ] ,
27- uid :auth [ "uid" ] ,
28- nickname : auth [ "extra" ] [ "raw_info" ] [ "screen_name" ] ,
29- password : Devise . friendly_token [ 0 , 20 ] )
30-
31- @user . email = params [ :user ] [ "email" ]
32-
33- @user . save!
34- sign_in_and_redirect @user , :event => :authentication
30+ if User . where ( email : params [ :user ] [ "email" ] ) . first
31+ @user = User . new
32+ render sign_up_from_twitter_path
33+ else
34+ auth = session [ "devise.twitter_data" ]
35+
36+ @user = User . new ( provider :auth [ "provider" ] ,
37+ uid :auth [ "uid" ] ,
38+ nickname : auth [ "extra" ] [ "raw_info" ] [ "screen_name" ] ,
39+ password : Devise . friendly_token [ 0 , 20 ] )
40+
41+ @user . email = params [ :user ] [ "email" ]
42+
43+ @user . save!
44+ sign_in_and_redirect @user , :event => :authentication
45+ end
3546 end
3647end
0 commit comments