web spider26
web spider26

Reputation: 352

Can we use refinerycms for user authentication purpose

Am developing one website for which I have to do user login and registration form for the authentication purpose. My question is can we do this using only refinerycms and if it is possible please tell me how to do this. If it is not possible then please tell me which is the best approach. Am trying to implement user authentication using refinerycms. Am new to refinerycms.

Upvotes: 4

Views: 1065

Answers (1)

peacemaster
peacemaster

Reputation: 96

Refinery uses devise so you can use that as well. You can create a model that might look something like this:

module Refinery
  module Partners
    class Partner < Refinery::Core::BaseModel
      self.table_name = 'refinery_partners'      

      acts_as_indexed :fields => [:name]

      validates :email, :presence => true, :uniqueness => true

      #devise methods
      devise :database_authenticatable, :recoverable, :rememberable, :trackable,:validatable, :authentication_keys => [:email]


    end
  end
end

and not to forget the migration:

class CreatePartnersPartners < ActiveRecord::Migration

  def up
    create_table :refinery_partners do |t|
      t.string :email
      t.string :name

      ## Database authenticatable
      t.string :encrypted_password, :null => false, :default => ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at

      ## Trackable
      t.integer  :sign_in_count, :default => 0
      t.datetime :current_sign_in_at
      t.datetime :last_sign_in_at
      t.string   :current_sign_in_ip
      t.string   :last_sign_in_ip

      t.timestamps
    end

  end

  def down
    if defined?(::Refinery::UserPlugin)
      ::Refinery::UserPlugin.destroy_all({:name => "refinerycms-partners"})
    end

    if defined?(::Refinery::Page)
      ::Refinery::Page.delete_all({:link_url => "/partners/partners"})
    end

    drop_table :refinery_partners

  end

end

This should create the basic model that you can use. To finish up, change the routes.rb in your extension to add devise routes:

  devise_for :partners, :class_name => "Refinery::Partners::Partner",
  :controllers => {:sessions => 'refinery/partners/sessions', :passwords => 'refinery/partners/passwords'}

and override refinery/partners/passwords_controller.rb

module Refinery
  module Partners
    class PasswordsController < Devise::PasswordsController
    end
  end
end

and refinery/partners/sessions_controller.rb

module Refinery
  module Partners
    class SessionsController < Devise::SessionsController
    end
  end
end

now you should have everything you need

Upvotes: 7

Related Questions