auth_rails 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +41 -0
- data/app/controllers/auth_rails/api/auth_controller.rb +5 -0
- data/auth_rails.gemspec +1 -1
- data/lib/auth_rails/version.rb +1 -1
- data/lib/auth_rails.rb +2 -0
- data/lib/generators/auth_rails/migration_generator.rb +53 -0
- data/lib/generators/auth_rails/templates/allowed_tokens.tt +17 -0
- data/lib/generators/auth_rails_generator.rb +38 -0
- data/lib/generators/templates/auth_rails.tt +32 -0
- metadata +8 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a80fe0179e20db84cc1966bd18331d98b3172c4cd5c3b652949ef7bc7a508b0a
|
4
|
+
data.tar.gz: 6cc51206c4381735dd92f118c8268df20998739cad769bcd2e01211dabb20e76
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e7d2ccb1bbd06e8cf115267a998cd0490ac8e9583e5a351ca61c486d0ceafd26fda66eee7995a84e01dd4dd82ed29fa29c4af865cbf2f232b445a48bd6d0bc86
|
7
|
+
data.tar.gz: 7a2057151c16ea45d74eb88f9a501a232f5e714a713a22dc125b56fbb6f9710c0b02dd39d9364af8ab7a54e002b8cc511d95389d0d1467050470b970f2814ab1
|
data/README.md
CHANGED
@@ -6,8 +6,43 @@ Simple authentication for rails.
|
|
6
6
|
gem 'auth_rails'
|
7
7
|
```
|
8
8
|
|
9
|
+
# CLI
|
10
|
+
|
11
|
+
- init `auth_rails`
|
12
|
+
|
13
|
+
```sh
|
14
|
+
rails g auth_rails
|
15
|
+
```
|
16
|
+
|
17
|
+
- init `auth_rails` with strategy
|
18
|
+
|
19
|
+
```sh
|
20
|
+
rails g auth_rails --strategy allowed_token
|
21
|
+
```
|
22
|
+
|
23
|
+
- create migration for `allowed_token` strategy
|
24
|
+
|
25
|
+
```sh
|
26
|
+
rails g auth_rails:migration --strategy allowed_token
|
27
|
+
```
|
28
|
+
|
29
|
+
- if your model is not User
|
30
|
+
|
31
|
+
```sh
|
32
|
+
rails g auth_rails:migration --strategy allowed_token --model CustomUser
|
33
|
+
```
|
34
|
+
|
9
35
|
# Configuration
|
10
36
|
|
37
|
+
- User model must have `has_secure_password`
|
38
|
+
|
39
|
+
```rb
|
40
|
+
# app/models/user.rb
|
41
|
+
class User < ApplicationRecord
|
42
|
+
has_secure_password
|
43
|
+
end
|
44
|
+
```
|
45
|
+
|
11
46
|
```rb
|
12
47
|
# config/initializers/auth_rails.rb
|
13
48
|
|
@@ -84,6 +119,8 @@ end
|
|
84
119
|
|
85
120
|
class User < ApplicationRecord
|
86
121
|
include AuthRails::Concerns::AllowedTokenStrategy
|
122
|
+
|
123
|
+
has_secure_password
|
87
124
|
end
|
88
125
|
```
|
89
126
|
|
@@ -128,6 +165,10 @@ module Api
|
|
128
165
|
end
|
129
166
|
```
|
130
167
|
|
168
|
+
# Strategy list
|
169
|
+
|
170
|
+
- allowed_token
|
171
|
+
|
131
172
|
# License
|
132
173
|
|
133
174
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -22,6 +22,11 @@ module AuthRails
|
|
22
22
|
|
23
23
|
raise AuthRails.error_class, :unauthenticated if resource.blank?
|
24
24
|
|
25
|
+
resource.allowed_tokens.find_by(
|
26
|
+
jti: decoded_payload[:jti],
|
27
|
+
aud: decoded_payload[:aud]
|
28
|
+
)&.destroy!
|
29
|
+
|
25
30
|
respond_to_refresh(generate_token(resource))
|
26
31
|
end
|
27
32
|
|
data/auth_rails.gemspec
CHANGED
data/lib/auth_rails/version.rb
CHANGED
data/lib/auth_rails.rb
CHANGED
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module AuthRails
|
4
|
+
class MigrationGenerator < Rails::Generators::Base
|
5
|
+
include Rails::Generators::Migration
|
6
|
+
|
7
|
+
source_root File.expand_path('templates', __dir__)
|
8
|
+
|
9
|
+
class_option :strategy,
|
10
|
+
aliases: '-strat',
|
11
|
+
type: :string,
|
12
|
+
desc: 'Strategy to use, default is AuthRails::Strategies::BaseStrategy',
|
13
|
+
default: 'base'
|
14
|
+
|
15
|
+
class_option :model,
|
16
|
+
aliases: '-m',
|
17
|
+
type: :string,
|
18
|
+
desc: 'Model for strategy to associate with',
|
19
|
+
default: 'user'
|
20
|
+
|
21
|
+
def create_migration_files
|
22
|
+
@model = (options[:model] || 'user').underscore.to_sym
|
23
|
+
|
24
|
+
case options[:strategy]
|
25
|
+
when 'allowed_token'
|
26
|
+
migration_template(
|
27
|
+
'allowed_tokens.tt',
|
28
|
+
'db/migrate/create_allowed_tokens.rb',
|
29
|
+
migration_version: migration_version
|
30
|
+
)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class << self
|
35
|
+
def next_migration_number(dirname)
|
36
|
+
next_migration_number = current_migration_number(dirname) + 1
|
37
|
+
ActiveRecord::Migration.next_migration_number(next_migration_number)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def versioned_migrations?
|
44
|
+
Rails::VERSION::MAJOR >= 5
|
45
|
+
end
|
46
|
+
|
47
|
+
def migration_version
|
48
|
+
return unless versioned_migrations?
|
49
|
+
|
50
|
+
"[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class CreateAllowedTokens < ActiveRecord::Migration<%= migration_version %>
|
4
|
+
def change
|
5
|
+
create_table :allowed_tokens do |t|
|
6
|
+
t.string :jti, null: false
|
7
|
+
t.string :aud
|
8
|
+
t.datetime :exp, null: false
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
|
12
|
+
t.references :<%= @model %>, foreign_key: { on_delete: :cascade }, null: false
|
13
|
+
|
14
|
+
t.index %i[jti aud]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class AuthRailsGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('templates', __dir__)
|
5
|
+
|
6
|
+
class_option :strategy,
|
7
|
+
aliases: '-strat',
|
8
|
+
type: :string,
|
9
|
+
desc: 'Strategy to use, default is AuthRails::Strategies::BaseStrategy',
|
10
|
+
default: 'base'
|
11
|
+
|
12
|
+
class_option :model,
|
13
|
+
aliases: '-m',
|
14
|
+
type: :string,
|
15
|
+
desc: 'Model for strategy to associate with',
|
16
|
+
default: 'user'
|
17
|
+
|
18
|
+
def generate_auth_rails
|
19
|
+
@model = (options[:model] || 'user').camelcase
|
20
|
+
@is_allowed_token = options[:strategy] == 'allowed_token'
|
21
|
+
|
22
|
+
template(
|
23
|
+
'auth_rails.tt',
|
24
|
+
'config/initializers/auth_rails.rb'
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_allowed_tokens_strategy
|
29
|
+
return if options[:strategy].blank? || options[:strategy] != 'allowed_token'
|
30
|
+
|
31
|
+
invoke(
|
32
|
+
'auth_rails:migration',
|
33
|
+
[],
|
34
|
+
strategy: 'allowed_token',
|
35
|
+
model: (options[:model] || 'user').camelcase
|
36
|
+
)
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
AuthRails.configure do |config|
|
4
|
+
config.jwt do |jwt|
|
5
|
+
jwt.access_token do |access_token|
|
6
|
+
access_token.exp = 1.hour.since
|
7
|
+
access_token.secret_key = ENV.fetch('JWT_SECRET', '')
|
8
|
+
end
|
9
|
+
|
10
|
+
<%= @is_allowed_token ? '' : '# ' %>jwt.strategy = AuthRails::Strategies::AllowedTokenStrategy
|
11
|
+
|
12
|
+
# if you wanna use refresh token
|
13
|
+
# uncomment those lines below
|
14
|
+
# jwt.refresh_token do |refresh_token|
|
15
|
+
# refresh_token.http_only = true
|
16
|
+
# refresh_token.exp = 1.year.since
|
17
|
+
# refresh_token.algorithm = 'HS256'
|
18
|
+
# refresh_token.cookie_key = :ref_tok
|
19
|
+
# refresh_token.secret_key = ENV.fetch('JWT_SECRET', '')
|
20
|
+
# end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Rails.application.config.to_prepare do
|
25
|
+
AuthRails.configure do |config|
|
26
|
+
config.resource_class = <%= @model %>
|
27
|
+
|
28
|
+
# if you wanna use custom error classes
|
29
|
+
# uncomment code below
|
30
|
+
# config.error_class = AuthError
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: auth_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alpha
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jwt
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.7'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '2.7'
|
27
27
|
description: Simple authentication for Rails
|
28
28
|
email:
|
29
29
|
- alphanolucifer@gmail.com
|
@@ -47,6 +47,10 @@ files:
|
|
47
47
|
- lib/auth_rails/strategies/allowed_token_strategy.rb
|
48
48
|
- lib/auth_rails/strategies/base_strategy.rb
|
49
49
|
- lib/auth_rails/version.rb
|
50
|
+
- lib/generators/auth_rails/migration_generator.rb
|
51
|
+
- lib/generators/auth_rails/templates/allowed_tokens.tt
|
52
|
+
- lib/generators/auth_rails_generator.rb
|
53
|
+
- lib/generators/templates/auth_rails.tt
|
50
54
|
homepage: https://github.com/zgid123/auth_rails
|
51
55
|
licenses:
|
52
56
|
- MIT
|