simple_user_auth 0.0.8 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -27,6 +27,7 @@ module SimpleUserAuth
27
27
  klass.extend(ClassMethods)
28
28
  klass.class_eval do
29
29
  include ClassInstanceMethods
30
+ class_attribute :authenticator
30
31
  attr_accessor :password
31
32
  attr_accessor :current_password
32
33
  validate :change_password_validator
@@ -44,14 +45,14 @@ module SimpleUserAuth
44
45
  # Select the database field you want to find the user by with when you use the authenticate method
45
46
  # e.g. authenticate_by(:email)
46
47
  def authenticate_by(authenticator)
47
- write_inheritable_attribute(:authenticator, authenticator)
48
+ self.authenticator = authenticator
48
49
  end
49
50
 
50
- # Finds the user in the database by the authenticator and verifys them against the submitted password
51
+ # Finds the user in the database by the authenticator and verifys them against the submitted password, takes an optional :find_by to override authenticate_by
51
52
  # e.g. User.authenticate(params[:session][:email], params[:session][:password])
52
- def authenticate(search, submitted_password)
53
- authenticator = read_inheritable_attribute(:authenticator)
54
- user = find(:first, :conditions => ["#{authenticator} = ?", search])
53
+ # e.g. User.authenticate(params[:session][:phone_number], params[:session][:password], :find_by => :phone)
54
+ def authenticate(search, submitted_password, args = {})
55
+ user = find(:first, :conditions => ["#{args[:find_by] || authenticator} = ?", search])
55
56
  return nil if user.nil?
56
57
  return user if user.has_password?(submitted_password)
57
58
  end
@@ -112,6 +113,8 @@ module SimpleUserAuth
112
113
  klass.extend(ClassMethods)
113
114
  klass.class_eval do
114
115
  include ClassInstanceMethods
116
+ class_attribute :user_model_for_sign_in
117
+ class_attribute :deny_access_callback
115
118
  helper_method :current_user, :signed_in?, :not_signed_in?, :current_user?
116
119
  end
117
120
  end
@@ -123,15 +126,15 @@ module SimpleUserAuth
123
126
  # e.g. can_sign_in :user, :deny => :my_deny_callback
124
127
  def can_sign_in(model, args = {})
125
128
  klass = Kernel.const_get(model.to_s.camelize)
126
- write_inheritable_attribute(:user_model_for_sign_in, klass)
127
- write_inheritable_attribute(:deny_access_callback, args[:deny])
129
+ self.user_model_for_sign_in = klass
130
+ self.deny_access_callback = args[:deny]
128
131
  end
129
132
 
130
133
  end
131
134
 
132
135
  module ClassInstanceMethods
133
136
 
134
- # Signs in a user, if the second parameter is false (default) the cookie will last only the session.
137
+ # Signs in a user, if :remember_me is true, cookies will not expire.
135
138
  def sign_in(user, args = {})
136
139
  if args[:remember_me]
137
140
  cookies.permanent.signed[remember_token_name] = [user.id, user.salt]
@@ -171,21 +174,16 @@ module SimpleUserAuth
171
174
  private
172
175
 
173
176
  def failed_authentication
174
- callback = self.class.read_inheritable_attribute(:deny_access_callback)
175
- if callback && respond_to?(callback)
176
- send(callback)
177
+ if self.class.deny_access_callback && respond_to?(self.class.deny_access_callback)
178
+ send(self.class.deny_access_callback)
177
179
  else
178
180
  render :text => 'Access Denied', :status => 403
179
181
  end
180
182
  return false
181
183
  end
182
184
 
183
- def user_model
184
- self.class.read_inheritable_attribute(:user_model_for_sign_in)
185
- end
186
-
187
185
  def remember_token_name
188
- "#{user_model.name.downcase}_remember_token".to_sym
186
+ "#{self.class.user_model_for_sign_in.name.downcase}_remember_token".to_sym
189
187
  end
190
188
 
191
189
  def current_user=(user)
@@ -193,7 +191,7 @@ module SimpleUserAuth
193
191
  end
194
192
 
195
193
  def user_from_remember_token
196
- user_model.authenticate_with_salt(*remember_token)
194
+ self.class.user_model_for_sign_in.authenticate_with_salt(*remember_token)
197
195
  end
198
196
 
199
197
  def remember_token
@@ -1,3 +1,3 @@
1
1
  module SimpleUserAuth
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
data/test/model_test.rb CHANGED
@@ -3,7 +3,7 @@ require "test_helper"
3
3
  class ModelTest < ActiveSupport::TestCase
4
4
 
5
5
  def setup
6
- @user = User.create(:email => "info@zenstack.com", :password => "password", :password_confirmation => "password")
6
+ @user = User.create(:email => "info@zenstack.com", :password => "password", :password_confirmation => "password", :other_search => "foo")
7
7
  end
8
8
 
9
9
  def teardown
@@ -31,6 +31,9 @@ class ModelTest < ActiveSupport::TestCase
31
31
  test "authenticate" do
32
32
  assert_equal(User.authenticate(@user.email, "password"), @user)
33
33
  assert !User.authenticate("info@zenstack.com", "badpassword")
34
+ assert !User.authenticate("badsearch", "password", :find_by => :other_search)
35
+ assert_equal(User.authenticate("foo", "password", :find_by => :other_search), @user)
36
+ assert !User.authenticate("foo", "badpassword", :find_by => :other_search)
34
37
  end
35
38
 
36
39
  test "authenticate_with_salt" do
data/test/test_helper.rb CHANGED
@@ -5,6 +5,17 @@ require 'test/unit'
5
5
  require 'rails/test_help'
6
6
  require 'dummy/config/environment.rb'
7
7
 
8
- ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
8
+ ActiveRecord::Schema.define do
9
+
10
+ create_table "users", :force => true do |t|
11
+ t.string "email"
12
+ t.string "other_search"
13
+ t.string "encrypted_password"
14
+ t.string "salt"
15
+ t.datetime "created_at"
16
+ t.datetime "updated_at"
17
+ end
18
+
19
+ end
9
20
 
10
21
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: simple_user_auth
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.8
5
+ version: 0.0.9
6
6
  platform: ruby
7
7
  authors:
8
8
  - Erich Menge
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-10 00:00:00 Z
13
+ date: 2011-06-04 00:00:00 Z
14
14
  dependencies: []
15
15
 
16
16
  description: A simple no frills user authentication gem for my Rails projects.
@@ -43,8 +43,6 @@ files:
43
43
  - test/dummy/config/initializers/secret_token.rb
44
44
  - test/dummy/config/initializers/session_store.rb
45
45
  - test/dummy/config/routes.rb
46
- - test/dummy/db/migrate/20110506183728_create_users.rb
47
- - test/dummy/db/schema.rb
48
46
  - test/model_test.rb
49
47
  - test/test_helper.rb
50
48
  homepage: ""
@@ -88,7 +86,5 @@ test_files:
88
86
  - test/dummy/config/initializers/secret_token.rb
89
87
  - test/dummy/config/initializers/session_store.rb
90
88
  - test/dummy/config/routes.rb
91
- - test/dummy/db/migrate/20110506183728_create_users.rb
92
- - test/dummy/db/schema.rb
93
89
  - test/model_test.rb
94
90
  - test/test_helper.rb
@@ -1,14 +0,0 @@
1
- class CreateUsers < ActiveRecord::Migration
2
- def self.up
3
- create_table :users do |t|
4
- t.string :email
5
- t.string :encrypted_password
6
- t.string :salt
7
- t.timestamps
8
- end
9
- end
10
-
11
- def self.down
12
- drop_table :users
13
- end
14
- end
@@ -1,23 +0,0 @@
1
- # This file is auto-generated from the current state of the database. Instead
2
- # of editing this file, please use the migrations feature of Active Record to
3
- # incrementally modify your database, and then regenerate this schema definition.
4
- #
5
- # Note that this schema.rb definition is the authoritative source for your
6
- # database schema. If you need to create the application database on another
7
- # system, you should be using db:schema:load, not running all the migrations
8
- # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9
- # you'll amass, the slower it'll run and the greater likelihood for issues).
10
- #
11
- # It's strongly recommended to check this file into your version control system.
12
-
13
- ActiveRecord::Schema.define(:version => 20110506183728) do
14
-
15
- create_table "users", :force => true do |t|
16
- t.string "email"
17
- t.string "encrypted_password"
18
- t.string "salt"
19
- t.datetime "created_at"
20
- t.datetime "updated_at"
21
- end
22
-
23
- end