Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Devise, OmniAuth, and               FacebookA tutorial on how to setup basic rails security using Facebook for authenticat...
Setup   Create your basic application    > rvm use ruby-1.9.2-p290@rails3.2    > rails new MyGreatApp   Add devise to yo...
Generate User Model   Generate devise modules    > rails generate devise:install   Generate User model    > rails genera...
Update Routes and Configuration   Add the following line to config/environments/development.rb    config.action_mailer.de...
Generated User Modelclass User < ActiveRecord::Base # Include default devise modules. Others available are:  # :token_auth...
Generated Migrationclass DeviseCreateUsers < ActiveRecord::Migration  def change    create_table(:users) do |t|      t.dat...
Add before filter   Add a before filter to app/controllers/application_controller.rb       This will protect all your ac...
Run the application and try it out
Congratulations   You now have the basic devise working   See https://github.com/plataformatec/devise for more detailed ...
Add Facebook   Now everybody wants the ability to sign in using Facebook   Add omniauth-facebook to your gemfile.    gem...
Configure Devise   Go into the config/initializers/devise.rb and add    require "omniauth-facebook"    config.omniauth :f...
Configure the Facebook App
Set App Domain, Website and capture IDs
Finish configuration   Take the keys generated by Facebook and put them into config/devise.rb   Add Omniauth to your Use...
Setup callbacks   When Facebook returns to the application there are some routes that are    needed.   Create a Users:Om...
Users::OmniauthCallbacksControllerclass Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController  def face...
Add finder to User modeldef self.find_for_facebook_oauth(access_token, signed_in_resource=nil)   data = access_token.extra...
Run
Connect
Grant Access
Done
More   https://github.com/plataformatec/devise   https://github.com/plataformatec/devise/wiki/OmniAuth%3A-Overview   ht...
Upcoming SlideShare
Loading in …5
×

Devise and Rails

11,376 views

Published on

A step by step process to setup

Published in: Technology
  • Be the first to comment

Devise and Rails

  1. 1. Devise, OmniAuth, and FacebookA tutorial on how to setup basic rails security using Facebook for authentication
  2. 2. Setup Create your basic application > rvm use ruby-1.9.2-p290@rails3.2 > rails new MyGreatApp Add devise to your gemfile gem devise Run bundler again > bundle install
  3. 3. Generate User Model Generate devise modules > rails generate devise:install Generate User model > rails generate devise User
  4. 4. Update Routes and Configuration Add the following line to config/environments/development.rb config.action_mailer.default_url_options = { :host => localhost:3000 } Add a default route to config/routes.rb root :to => ‘home#index’ Add some flash notices into the base template <p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p> Disable model loading when compiling assets. Add the following to config/application.rb config.assets.initialize_on_precompile = false
  5. 5. Generated User Modelclass User < ActiveRecord::Base # Include default devise modules. Others available are: # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and:omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable # Setup accessible (or protected) attributes for your model attr_accessible :email, :password, :password_confirmation, :remember_meend
  6. 6. Generated Migrationclass DeviseCreateUsers < ActiveRecord::Migration def change create_table(:users) do |t| t.database_authenticatable :null => false t.recoverable t.rememberable t.trackable t.timestamps end add_index :users, :email, :unique => true add_index :users, :reset_password_token, :unique => trueendend
  7. 7. Add before filter Add a before filter to app/controllers/application_controller.rb  This will protect all your actions. Use an except filter in places you don’t need > before_filter :authenticate_user! Create a home controller > rails generate controller home Add a method and view for index Remove index.html from public
  8. 8. Run the application and try it out
  9. 9. Congratulations You now have the basic devise working See https://github.com/plataformatec/devise for more detailed information about what you can do
  10. 10. Add Facebook Now everybody wants the ability to sign in using Facebook Add omniauth-facebook to your gemfile. gem omniauth-facebook’ Do a Bundle install
  11. 11. Configure Devise Go into the config/initializers/devise.rb and add require "omniauth-facebook" config.omniauth :facebook, "APP_ID", "APP_SECRET”  Go to https://github.com/mkdynamic/omniauth-facebook to get more information about options include scopes and display options. Go to Facebook and generate a developer key  Go to https://developers.facebook.com/apps/ select to create a new app
  12. 12. Configure the Facebook App
  13. 13. Set App Domain, Website and capture IDs
  14. 14. Finish configuration Take the keys generated by Facebook and put them into config/devise.rb Add Omniauth to your User object. devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :omniauthable
  15. 15. Setup callbacks When Facebook returns to the application there are some routes that are needed. Create a Users:OmniauthCallbackController in the app/controllers/users folder.  Will show this file on the next slide Add a route to the new controller by updatating the devise_for in config/routes.rb devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
  16. 16. Users::OmniauthCallbacksControllerclass Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def facebook # You need to implement the method below in your model @user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user) if @user.persisted? flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook" sign_in_and_redirect @user, :event => :authentication else session["devise.facebook_data"] = request.env["omniauth.auth"] redirect_to new_user_registration_url end end def passthru render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false endend
  17. 17. Add finder to User modeldef self.find_for_facebook_oauth(access_token, signed_in_resource=nil) data = access_token.extra.raw_info if user = User.where(:email => data.email).first user else # Create a user with a stub password. User.create!(:email => data.email, :password => Devise.friendly_token[0,20]) end end
  18. 18. Run
  19. 19. Connect
  20. 20. Grant Access
  21. 21. Done
  22. 22. More https://github.com/plataformatec/devise https://github.com/plataformatec/devise/wiki/OmniAuth%3A-Overview https://github.com/plataformatec/devise/wiki/How-To:-Create-Haml-and- Slim-Views

×