Sha256: 6fae5eb99ffb4ce98f5890aed9f59d7301b7423715b74c6919196eb8634f9aea

Contents?: true

Size: 1.73 KB

Versions: 7

Compression:

Stored size: 1.73 KB

Contents

module Clearance
  module Authentication

    def self.included(controller)
      controller.send(:include, InstanceMethods)

      controller.class_eval do
        helper_method :current_user
        helper_method :signed_in?

        hide_action :current_user, :signed_in?
      end
    end

    module InstanceMethods
      def current_user
        @_current_user ||= (user_from_cookie || user_from_session)
      end

      def signed_in?
        ! current_user.nil?
      end

      protected

      def authenticate
        deny_access unless signed_in?
      end

      def user_from_session
        if session[:user_id]
          return nil  unless user = ::User.find_by_id(session[:user_id])
          return user if     user.email_confirmed?
        end
      end

      def user_from_cookie
        if token = cookies[:remember_token]
          return nil  unless user = ::User.find_by_token(token)
          return user if     user.remember?
        end
      end

      def sign_user_in(user)
        sign_in(user)
      end

      def sign_in(user)
        if user
          session[:user_id] = user.id
        end
      end

      def redirect_back_or(default)
        session[:return_to] ||= params[:return_to]
        if session[:return_to]
          redirect_to(session[:return_to])
        else
          redirect_to(default)
        end
        session[:return_to] = nil
      end

      def redirect_to_root
        redirect_to root_url
      end

      def store_location
        session[:return_to] = request.request_uri if request.get?
      end

      def deny_access(flash_message = nil, opts = {})
        store_location
        flash[:failure] = flash_message if flash_message
        redirect_to new_session_url
      end
    end

  end
end

Version data entries

7 entries across 7 versions & 2 rubygems

Version Path
thoughtbot-clearance-0.6.0 lib/clearance/authentication.rb
thoughtbot-clearance-0.6.1 lib/clearance/authentication.rb
thoughtbot-clearance-0.6.2 lib/clearance/authentication.rb
thoughtbot-clearance-0.6.3 lib/clearance/authentication.rb
vita-clearance-0.6.2 lib/clearance/authentication.rb
vita-clearance-0.6.3.1 lib/clearance/authentication.rb
vita-clearance-0.6.3 lib/clearance/authentication.rb