class Teleport::DeviseOauthGenerator
Public Instance Methods
add()
click to toggle source
# File lib/generators/teleport/devise_oauth.rb, line 5 def add gem 'omniauth-facebook' gem 'omniauth-vkontakte' gem 'omniauth-odnoklassniki' copy_file 'devise_oauth/devise_oauth.rb', 'config/initializers/devise_oauth.rb' insert_into_file 'config/secrets.yml', after: "development:\n" do %q{ fb_app: '267206890544721' fb_key: '40aba0555fb761272b07711e30ebe371' vk_app: '4470254' vk_key: 'J7ANCTdIWb8SAKzA4eUk' ok_app: '1096984323' ok_key: '792DB3D2757C2A786C2AD5EA' ok_pkey: 'CBADHHFCABABABABA' } end insert_into_file 'config/secrets.yml', after: "production:\n" do %q{ fb_app: <%= ENV["FB_APP"] %> fb_key: <%= ENV["FB_KEY"] %> vk_app: <%= ENV["VK_APP"] %> vk_key: <%= ENV["VK_KEY"] %> ok_app: <%= ENV["OK_APP"] %> ok_key: <%= ENV["OK_KEY"] %> ok_pkey: <%= ENV["OK_PKEY"] %> } end generate 'migration', 'AddColumnsToUsers provider uid auth_info:text' rake 'db:migrate' insert_into_file 'app/models/user.rb', before: "end\n" do %q{ serialize :auth_info, JSON devise :omniauthable, omniauth_providers: [:facebook, :vkontakte, :odnoklassniki] def self.from_omniauth(auth_hash) auth = auth_hash['auth_hash'].with_indifferent_access find_or_create_by(provider: auth[:provider], uid: auth[:uid]) do |user| user.email = auth[:info][:email] || "#{auth[:uid]}@example.com" user.password = Devise.friendly_token[0,20] user.info = auth.try(:to_json) end end } end append_to_file 'app/views/welcome/index.haml' do %q{ %ul.nav - if user_signed_in? %li= link_to "#{current_user.email} (#{current_user.provider})", '#' %li= link_to "Sign out", destroy_user_session_path, :method => :delete - else %li= link_to "Sign in with Facebook", user_omniauth_authorize_path(:facebook) %li= link_to "Sign in with Vkontakte", user_omniauth_authorize_path(:vkontakte) %li= link_to "Sign in with Odnoklassniki", user_omniauth_authorize_path(:odnoklassniki) } end copy_file 'devise_oauth/omniauth_callbacks_controller.rb', 'app/controllers/users/omniauth_callbacks_controller.rb' oauth_without_other_auths = ask 'Use oauth without other authentications? (y/n)' content = if oauth_without_other_auths %q{ devise_for :users, controllers: { omniauth_callbacks: "users/omniauth_callbacks" } devise_scope :user do get 'sign_in', to: 'devise/sessions#new'#, as: :new_user_session get 'sign_out', to: 'devise/sessions#destroy'#, as: :destroy_user_session end } else %q{ devise_scope :user do get 'sign_out', to: 'devise/sessions#destroy'#, as: :destroy_user_session end devise_for :users, controllers: { omniauth_callbacks: "users/omniauth_callbacks" } } end comment_lines 'config/routes.rb', /devise_for/ route content end