From 6a9125ccbacea489311fc4cc548ac03e7d0b412d Mon Sep 17 00:00:00 2001 From: yasushiito Date: Wed, 15 Jul 2015 16:08:53 +0900 Subject: [PATCH] fix: omniauth twitter --- Gemfile | 13 +++++-------- app/assets/javascripts/omniauth_callbacks.coffee | 3 +++ app/assets/javascripts/yasapp.js | 1 - app/assets/stylesheets/omniauth_callbacks.css.scss | 3 +++ app/controllers/omniauth_callbacks_controller.rb | 22 ++++++++++++++++++++++ app/helpers/omniauth_callbacks_helper.rb | 2 ++ app/models/user.rb | 22 ++++++++++++++++++++++ app/views/user_sessions/new.html.erb | 3 ++- app/views/users/registrations/new.html.erb | 10 ++++++---- config/initializers/devise.rb | 3 ++- config/routes.rb | 2 +- config/secrets.yml | 10 ---------- db/migrate/20150714094001_add_omniauth_on_users.rb | 8 ++++++++ 13 files changed, 76 insertions(+), 26 deletions(-) create mode 100644 app/assets/javascripts/omniauth_callbacks.coffee create mode 100644 app/assets/stylesheets/omniauth_callbacks.css.scss create mode 100644 app/controllers/omniauth_callbacks_controller.rb create mode 100644 app/helpers/omniauth_callbacks_helper.rb delete mode 100644 config/secrets.yml create mode 100644 db/migrate/20150714094001_add_omniauth_on_users.rb diff --git a/Gemfile b/Gemfile index e05cdeb8..33046935 100644 --- a/Gemfile +++ b/Gemfile @@ -3,14 +3,15 @@ source 'https://rubygems.org' gem 'rails', '~> 4.1.0' gem 'devise' gem 'omniauth' +gem 'omniauth-twitter' gem 'rest-client' gem 'underscore-rails' # gem 'backbone-rails' gem 'rails-timeago' gem 'kaminari' gem 'sanitize' -gem 'aws-s3' -#gem 'aws-sdk', '< 2.0' +#gem 'aws-s3' +gem 'aws-sdk', '< 2.0' gem 'awesome_nested_set', '~> 3.0' gem 'validates_existence' gem "validate_url" @@ -56,12 +57,8 @@ gem 'bcrypt-ruby', '~> 3.0.0' # To use debugger # gem 'ruby-debug19', :require => 'ruby-debug' -if RUBY_PLATFORM =~ /mingw/ - gem 'therubyracer', :path => '../therubyracer-0.11.0beta1-x86-mingw32' -else - gem 'libv8' - gem 'therubyracer' -end + +# gem 'therubyracer', :path => '../therubyracer-0.11.0beta1-x86-mingw32' group :production do #gem 'pg' diff --git a/app/assets/javascripts/omniauth_callbacks.coffee b/app/assets/javascripts/omniauth_callbacks.coffee new file mode 100644 index 00000000..24f83d18 --- /dev/null +++ b/app/assets/javascripts/omniauth_callbacks.coffee @@ -0,0 +1,3 @@ +# Place all the behaviors and hooks related to the matching controller here. +# All this logic will automatically be available in application.js. +# You can use CoffeeScript in this file: http://coffeescript.org/ diff --git a/app/assets/javascripts/yasapp.js b/app/assets/javascripts/yasapp.js index 7aa64464..8360f564 100644 --- a/app/assets/javascripts/yasapp.js +++ b/app/assets/javascripts/yasapp.js @@ -307,7 +307,6 @@ //= require_directory ./models //= require_directory ./view //= require_directory ./view/button -//= require_directory ./view/image //= require_directory ./view/show //= require_directory ./view/play //= require_directory ./views diff --git a/app/assets/stylesheets/omniauth_callbacks.css.scss b/app/assets/stylesheets/omniauth_callbacks.css.scss new file mode 100644 index 00000000..77eaa70e --- /dev/null +++ b/app/assets/stylesheets/omniauth_callbacks.css.scss @@ -0,0 +1,3 @@ +// Place all the styles related to the omniauth_callbacks controller here. +// They will automatically be included in application.css. +// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb new file mode 100644 index 00000000..d41303c7 --- /dev/null +++ b/app/controllers/omniauth_callbacks_controller.rb @@ -0,0 +1,22 @@ +class OmniauthCallbacksController < ApplicationController + + def all + user = User.from_omniauth(request.env["omniauth.auth"]) + if user.persisted? + flash.notice = "login successful!!" + sign_in_and_redirect user + else + session["devise.user_attributes"] = user.attributes + redirect_to new_user_registration_url + end + end + + def twitter + self.all + end + + def failure + return render :json => {:success => false, :errors => ["Login failed."]} + end + +end diff --git a/app/helpers/omniauth_callbacks_helper.rb b/app/helpers/omniauth_callbacks_helper.rb new file mode 100644 index 00000000..d2103da2 --- /dev/null +++ b/app/helpers/omniauth_callbacks_helper.rb @@ -0,0 +1,2 @@ +module OmniauthCallbacksHelper +end diff --git a/app/models/user.rb b/app/models/user.rb index 381006c3..bde3804b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -50,6 +50,28 @@ class User < ActiveRecord::Base res end + def self.from_omniauth(auth) + where(provider: auth.provider, uid: auth.uid).first_or_create do |user| + user.name = auth.info.nickname + user.email = auth.info.email + end + end + + def self.new_with_session(params, session) + if session["devise.user_attributes"] + new(session["devise.user_attributes"], without_protection: true) do |user| + user.attributes = params + user.valid? + end + else + super + end + end + + def password_required? + super && provider.blank? + end + private def user_params params.require(:user).permit(:email, :password, :password_confirmation, :remember_me, :authentication_token) diff --git a/app/views/user_sessions/new.html.erb b/app/views/user_sessions/new.html.erb index c4e7c188..3b1c8eb3 100644 --- a/app/views/user_sessions/new.html.erb +++ b/app/views/user_sessions/new.html.erb @@ -19,7 +19,8 @@
<%= f.submit t('users.signin.signin') %>
<% end %> -

+

<%= link_to "Sign in with Twitter", user_omniauth_authorize_path(:twitter) %> +

<%= render :partial => "/users/shared/links" %> diff --git a/app/views/users/registrations/new.html.erb b/app/views/users/registrations/new.html.erb index f7ba8f70..9eb17c37 100644 --- a/app/views/users/registrations/new.html.erb +++ b/app/views/users/registrations/new.html.erb @@ -7,11 +7,13 @@
<%= f.label :email %>
<%= f.email_field :email %>
-
<%= f.label :password %>
- <%= f.password_field :password %>
+ <% if f.object.password_required? %> +
<%= f.label :password %>
+ <%= f.password_field :password %>
-
<%= f.label :password_confirmation %>
- <%= f.password_field :password_confirmation %>
+
<%= f.label :password_confirmation %>
+ <%= f.password_field :password_confirmation %>
+ <% end %>
<%= f.submit t('users.signup.signup') %>
<% end %> diff --git a/config/initializers/devise.rb b/config/initializers/devise.rb index 33a6b793..d64c9044 100644 --- a/config/initializers/devise.rb +++ b/config/initializers/devise.rb @@ -6,7 +6,8 @@ Devise.setup do |config| # note that it will be overwritten if you use your own mailer class with default "from" parameter. config.mailer_sender = "please-change-me-at-config-initializers-devise@example.com" config.sign_out_via = :get - config.secret_key = 'ef21afb7caa18dd6b587e999417c281dbcafdfa132cdb38d08bd4150b763bda62bd5739df69d0d85f514f970608e2efff7fe92a5543ca546ce614ee188bc0177' + config.omniauth :twitter, Rails.application.secrets.twitter_api_key, Rails.application.secrets.twitter_api_secret + config.secret_key = Rails.application.secrets.devise_secret # Configure the class responsible to send e-mails. # config.mailer = "Devise::Mailer" diff --git a/config/routes.rb b/config/routes.rb index 80aff45e..3ccb1e94 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,5 @@ Pettanr::Application.routes.draw do - devise_for :users, controllers: {sessions: 'user_sessions'} + devise_for :users, controllers: {sessions: 'user_sessions', omniauth_callbacks: "omniauth_callbacks"} devise_for :admins devise_for :demand_users diff --git a/config/secrets.yml b/config/secrets.yml deleted file mode 100644 index 5cc8a7e5..00000000 --- a/config/secrets.yml +++ /dev/null @@ -1,10 +0,0 @@ -development: - secret_key_base: 6809ff947425908bae66f4c4b2d9a88366d900609d88034914d5719ddf434123772c9cd26fd9d0a15fa080164c6fef77d74033a05de57f0694df0d52dad4e37a - access_key_id: aws-aid-zzzzzz - secret_access_key: aws-key-xxxxxx - -test: - secret_key_base: 6809ff947425908bae66f4c4b2d9a88366d900609d88034914d5719ddf434123772c9cd26fd9d0a15fa080164c6fef77d74033a05de57f0694df0d52dad4e37a - -production: - secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> diff --git a/db/migrate/20150714094001_add_omniauth_on_users.rb b/db/migrate/20150714094001_add_omniauth_on_users.rb new file mode 100644 index 00000000..842a145c --- /dev/null +++ b/db/migrate/20150714094001_add_omniauth_on_users.rb @@ -0,0 +1,8 @@ +class AddOmniauthOnUsers < ActiveRecord::Migration + def change + add_column :users, :provider, :string + add_column :users, :uid, :string + add_column :users, :name, :string + add_column :users, :token, :string + end +end -- 2.11.0