devise_custom_authenticatable 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 12bd7f8777135a62852d2ba22efd0f7cec1a16e6
4
+ data.tar.gz: 26405720e35ba421a11e456f164096eeb2567527
5
+ SHA512:
6
+ metadata.gz: 87ced17afe13cdf57cce3938a046045651f06ff7498fa9a0341d2e284fdae4b54b08f5be835db149ad07209ecd87f0baeb8a6dffb32aeb5e2452bcaa470b0a21
7
+ data.tar.gz: 6bb9e8176658e0aa3d5551071555077c734547b7b4bc606fad84f5c82cad7c7e6b64a432eb9e61554e6a35be7333e636b5057ea6eb19f59a083f3172ae282528
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ script: "bundle exec rspec spec"
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - 2.1.0
7
+ - jruby-19mode
@@ -9,3 +9,7 @@
9
9
  ## v0.1.0
10
10
 
11
11
  * Feature: generate session routes for :custom_authenticatable strategy
12
+
13
+ ## v0.1.1
14
+
15
+ * Checked and confirmed that all functionality work with devise >= 2.0
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # DeviseCustomAuthenticatable
2
2
 
3
- Simple way how to customize devise authentication logic and still be inline with all other devise parts
3
+ [![Build Status](https://travis-ci.org/AMekss/devise_custom_authenticatable.png?branch=master)](https://travis-ci.org/AMekss/devise_custom_authenticatable)
4
+ [![Gem Version](https://badge.fury.io/rb/devise_custom_authenticatable.png)](http://badge.fury.io/rb/devise_custom_authenticatable)
4
5
 
5
- Extends Devise with new module `:custom_authenticatable`, when enabled it will try to call `#valid_for_custom_authentication?` method on resource model with password. Define this method and return true in order to authenticate user. If method isn't defined for model or returns false/nil then authentication handling will be passed to next strategy e.g. `:database_authenticatable`, if there is no other strategies left for resource then authentication will be failed.
6
+ This gem is extension for [Devise](http://github.com/plataformatec/devise) authentication. It provides custom strategy via extended module `:custom_authenticatable` which is simple way how to customize Devise authentication logic but stay inline with all other features e.g. modules `:rememberable`, `:lockable`, `:timeoutable`, default controllers and even views if you like. `:custom_authenticatable` can work together with Devise default authentication strategy `:database_authenticatable` or on its own.
6
7
 
7
8
  ## Installation
8
9
 
@@ -18,9 +19,66 @@ Or install it yourself as:
18
19
 
19
20
  $ gem install devise_custom_authenticatable
20
21
 
22
+ ##Prerequisites
23
+
24
+ * devise >= 2.0
25
+
21
26
  ## Usage
22
27
 
23
- TODO: Write usage instructions here
28
+ [Devise](http://github.com/plataformatec/devise) should be already installed and enabled for any resource in your app. Open Devise enabled model and add `:custom_authenticatable`. When strategy is enabled it'll try to call `#valid_for_custom_authentication?` method on resource model with password. Define this method and return true in order to authenticate user. If there is no such method for model or it returns false/nil then authentication handling will be passed to next strategy e.g. `:database_authenticatable`, if there is no other strategies left for resource then authentication will be failed. For example:
29
+
30
+ ```ruby
31
+ devise :custom_authenticatable, :database_authenticatable, :trackable, :lockable, :timeoutable
32
+ # OR
33
+ devise :custom_authenticatable, :trackable, :lockable, :timeoutable
34
+
35
+ # AND
36
+
37
+ def valid_for_custom_authentication?(password)
38
+ # Your authentication logic goes here and returns either true or false
39
+ LDAP.authenticate(self.username, password)
40
+ end
41
+ ```
42
+
43
+ This gem also provide handy helper `#authenticated_by_any_custom_strategy?` for managing your custom authentication methods. For example you would like to provide LDAP authentication for users, but also would like to have some dummy password in development environments. You can write something like this:
44
+
45
+ ```ruby
46
+ class User
47
+ devise :custom_authenticatable, :trackable, :lockable, :timeoutable
48
+ # ...
49
+
50
+ def valid_for_custom_authentication?(password)
51
+ authenticated_by_any_custom_strategy?(password, :development, :ldap)
52
+ end
53
+
54
+ def authenticated_by_development_strategy?(password)
55
+ if %w{development test demo}.include?(Rails.env)
56
+ password == 'dummy'
57
+ end
58
+ end
59
+
60
+ def authenticated_by_ldap_strategy?(password)
61
+ logger.info " Authenticate user '#{self.user_name}' with Active Directory..."
62
+ !!Ldap.authenticate(self.username, password)
63
+ end
64
+ end
65
+ ```
66
+
67
+ It will call all `authenticated_by_<strategy_name>_strategy?(password)` in turn if any of strategy methods return true authentication succeed otherwise fail.
68
+
69
+ **Note!** If you are using development strategies in your app always cover it with unit tests so it never get used in production by mistake, something like this for rspec:
70
+
71
+ ```ruby
72
+ it "development strategy shouldn't be enabled for Production environment" do
73
+ Rails.stub(env: ActiveSupport::StringInquirer.new("production"))
74
+ expect(@user.authenticated_by_development_strategy?('dummy')).not_to be_true
75
+ end
76
+ ```
77
+
78
+
79
+ ## TODO
80
+
81
+ * Write Integration tests
24
82
 
25
83
  ## Contributing
26
84
 
@@ -19,9 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
23
- spec.add_development_dependency "rspec"
22
+ spec.add_development_dependency "rspec", "~> 2.0"
24
23
 
25
- spec.add_dependency "devise", "~> 3.0"
24
+ spec.add_dependency "devise", ">= 2", "< 4"
26
25
 
27
26
  end
@@ -1,3 +1,3 @@
1
1
  module DeviseCustomAuthenticatable
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise_custom_authenticatable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
5
- prerelease:
4
+ version: 0.1.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Artūrs Mekšs
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-01-29 00:00:00.000000000 Z
11
+ date: 2014-02-09 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,59 +20,44 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
26
  version: '1.3'
30
- - !ruby/object:Gem::Dependency
31
- name: rake
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: '0'
46
27
  - !ruby/object:Gem::Dependency
47
28
  name: rspec
48
29
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
30
  requirements:
51
- - - ! '>='
31
+ - - ~>
52
32
  - !ruby/object:Gem::Version
53
- version: '0'
33
+ version: '2.0'
54
34
  type: :development
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
37
  requirements:
59
- - - ! '>='
38
+ - - ~>
60
39
  - !ruby/object:Gem::Version
61
- version: '0'
40
+ version: '2.0'
62
41
  - !ruby/object:Gem::Dependency
63
42
  name: devise
64
43
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
44
  requirements:
67
- - - ~>
45
+ - - '>='
68
46
  - !ruby/object:Gem::Version
69
- version: '3.0'
47
+ version: '2'
48
+ - - <
49
+ - !ruby/object:Gem::Version
50
+ version: '4'
70
51
  type: :runtime
71
52
  prerelease: false
72
53
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
54
  requirements:
75
- - - ~>
55
+ - - '>='
56
+ - !ruby/object:Gem::Version
57
+ version: '2'
58
+ - - <
76
59
  - !ruby/object:Gem::Version
77
- version: '3.0'
60
+ version: '4'
78
61
  description: Simple way to customize devise authentication logic and still be inline
79
62
  with all other devise parts
80
63
  email:
@@ -85,6 +68,7 @@ extra_rdoc_files: []
85
68
  files:
86
69
  - .gitignore
87
70
  - .rspec
71
+ - .travis.yml
88
72
  - CHANGELOG.md
89
73
  - Gemfile
90
74
  - LICENSE.txt
@@ -100,28 +84,27 @@ files:
100
84
  homepage: https://github.com/AMekss/devise_custom_authenticatable
101
85
  licenses:
102
86
  - MIT
87
+ metadata: {}
103
88
  post_install_message:
104
89
  rdoc_options: []
105
90
  require_paths:
106
91
  - lib
107
92
  required_ruby_version: !ruby/object:Gem::Requirement
108
- none: false
109
93
  requirements:
110
- - - ! '>='
94
+ - - '>='
111
95
  - !ruby/object:Gem::Version
112
96
  version: '0'
113
97
  required_rubygems_version: !ruby/object:Gem::Requirement
114
- none: false
115
98
  requirements:
116
- - - ! '>='
99
+ - - '>='
117
100
  - !ruby/object:Gem::Version
118
101
  version: '0'
119
102
  requirements: []
120
103
  rubyforge_project:
121
- rubygems_version: 1.8.25
104
+ rubygems_version: 2.2.1
122
105
  signing_key:
123
- specification_version: 3
124
- summary: ! 'Extends Devise with new module :custom_authenticatable, when enabled it
106
+ specification_version: 4
107
+ summary: 'Extends Devise with new module :custom_authenticatable, when enabled it
125
108
  will call #valid_for_custom_authentication? method on resource model for your customizations'
126
109
  test_files:
127
110
  - spec/devise/models/custom_authenticatable_spec.rb