passwd 0.1.3 → 0.4.0
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 +5 -5
- data/.github/workflows/ci.yml +28 -0
- data/.gitignore +11 -17
- data/.rubocop.yml +168 -0
- data/.ruby-version +1 -0
- data/Gemfile +3 -6
- data/LICENSE +21 -0
- data/README.md +89 -138
- data/Rakefile +5 -6
- data/bin/console +7 -0
- data/bin/setup +8 -0
- data/lib/generators/passwd/install/USAGE +5 -0
- data/lib/generators/passwd/install/install_generator.rb +10 -0
- data/lib/generators/passwd/install/templates/passwd.rb +21 -0
- data/lib/passwd.rb +33 -6
- data/lib/passwd/config.rb +27 -0
- data/lib/passwd/errors.rb +4 -0
- data/lib/passwd/rails/action_controller_ext.rb +78 -0
- data/lib/passwd/rails/active_record_ext.rb +35 -0
- data/lib/passwd/railtie.rb +18 -0
- data/lib/passwd/version.rb +2 -4
- data/passwd.gemspec +20 -11
- metadata +83 -53
- data/.coveralls.yml +0 -1
- data/.travis.yml +0 -10
- data/LICENSE.txt +0 -22
- data/lib/passwd/active_record.rb +0 -58
- data/lib/passwd/base.rb +0 -72
- data/lib/passwd/configuration/abstract_config.rb +0 -36
- data/lib/passwd/configuration/config.rb +0 -23
- data/lib/passwd/configuration/policy.rb +0 -46
- data/lib/passwd/configuration/tmp_config.rb +0 -18
- data/lib/passwd/password.rb +0 -41
- data/samples/activerecord/user.rake +0 -28
- data/spec/passwd/active_record_spec.rb +0 -142
- data/spec/passwd/base_spec.rb +0 -224
- data/spec/passwd/configuration/config_spec.rb +0 -242
- data/spec/passwd/configuration/policy_spec.rb +0 -133
- data/spec/passwd/configuration/tmp_config_spec.rb +0 -257
- data/spec/passwd/password_spec.rb +0 -150
- data/spec/spec_helper.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f9a0399d0e6b478da6e96ad38e2806fb32199bae624d5bddf4abd5093d652cf8
|
4
|
+
data.tar.gz: 6b7a805295dcd19b924156838b24463cbdd9bf233280027cf3ce49d4abeeb9df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 99d186d8eb981e43d3ece62f8d96c74ec84cb328d5d5fc56338d322cd9e0cef8f626ef405647eaad01e5cb0fda7e1af3f077beed16ec2fe9adc2798bc3ad9fa7
|
7
|
+
data.tar.gz: 7498777e9c67f19b18be0e4c1119fa810551bc4a2fc01411ac1ada816879fce1c2b16d9f31635e1f0426aa2c1486af985dc5b47894529a3b31e657457b5ec748
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: CI
|
9
|
+
on:
|
10
|
+
push:
|
11
|
+
branches: [ master ]
|
12
|
+
pull_request:
|
13
|
+
branches: [ master ]
|
14
|
+
jobs:
|
15
|
+
test:
|
16
|
+
runs-on: ubuntu-latest
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v2
|
19
|
+
- name: Set up Ruby
|
20
|
+
uses: ruby/setup-ruby@v1
|
21
|
+
with:
|
22
|
+
ruby-version: 2.7.2
|
23
|
+
- name: Install dependencies
|
24
|
+
run: bundle install
|
25
|
+
- name: Run tests
|
26
|
+
run: bundle exec rake spec
|
27
|
+
- name: Run rubocop
|
28
|
+
run: bundle exec rake rubocop
|
data/.gitignore
CHANGED
@@ -1,17 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
pkg
|
13
|
-
rdoc
|
14
|
-
spec/reports
|
15
|
-
test/tmp
|
16
|
-
test/version_tmp
|
17
|
-
tmp
|
1
|
+
/.bundle/
|
2
|
+
/.yardoc
|
3
|
+
/_yardoc/
|
4
|
+
/coverage/
|
5
|
+
/doc/
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/tmp/
|
9
|
+
|
10
|
+
/Gemfile.lock
|
11
|
+
/.rspec_status
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,168 @@
|
|
1
|
+
AllCops:
|
2
|
+
NewCops: enable
|
3
|
+
TargetRubyVersion: 2.7
|
4
|
+
Exclude:
|
5
|
+
- "node_modules/**/*"
|
6
|
+
- "vendor/**/*"
|
7
|
+
|
8
|
+
# Private methods indent.
|
9
|
+
Layout/IndentationConsistency:
|
10
|
+
EnforcedStyle: indented_internal_methods
|
11
|
+
|
12
|
+
# Warning: 120 characters
|
13
|
+
# Error: 160 characters
|
14
|
+
# Make the library more restrictive.
|
15
|
+
Layout/LineLength:
|
16
|
+
Max: 120
|
17
|
+
|
18
|
+
# Multi-line indentation with receiver.
|
19
|
+
Layout/MultilineMethodCallIndentation:
|
20
|
+
EnforcedStyle: indented_relative_to_receiver
|
21
|
+
|
22
|
+
Layout/SpaceInsideBlockBraces:
|
23
|
+
SpaceBeforeBlockParameters: false
|
24
|
+
|
25
|
+
Lint/AmbiguousBlockAssociation:
|
26
|
+
Exclude:
|
27
|
+
- "spec/**/*_spec.rb"
|
28
|
+
|
29
|
+
# May define constants within the block in spec.
|
30
|
+
Lint/ConstantDefinitionInBlock:
|
31
|
+
Exclude:
|
32
|
+
- "spec/**/*_spec.rb"
|
33
|
+
|
34
|
+
Lint/InheritException:
|
35
|
+
EnforcedStyle: standard_error
|
36
|
+
|
37
|
+
Lint/UnderscorePrefixedVariableName:
|
38
|
+
Enabled: false
|
39
|
+
|
40
|
+
Lint/UnusedMethodArgument:
|
41
|
+
Enabled: false
|
42
|
+
|
43
|
+
Metrics/AbcSize:
|
44
|
+
Max: 24
|
45
|
+
|
46
|
+
Metrics/BlockLength:
|
47
|
+
Exclude:
|
48
|
+
- "spec/**/*.rb"
|
49
|
+
- "Gemfile"
|
50
|
+
- "*.gemspec"
|
51
|
+
|
52
|
+
Metrics/CyclomaticComplexity:
|
53
|
+
Max: 10
|
54
|
+
|
55
|
+
Metrics/MethodLength:
|
56
|
+
Max: 20
|
57
|
+
|
58
|
+
Security/YAMLLoad:
|
59
|
+
Enabled: false
|
60
|
+
|
61
|
+
Style/Alias:
|
62
|
+
EnforcedStyle: prefer_alias_method
|
63
|
+
|
64
|
+
Style/AndOr:
|
65
|
+
EnforcedStyle: conditionals
|
66
|
+
|
67
|
+
Style/AsciiComments:
|
68
|
+
Enabled: false
|
69
|
+
|
70
|
+
Style/BlockDelimiters:
|
71
|
+
Enabled: false
|
72
|
+
|
73
|
+
Style/ClassAndModuleChildren:
|
74
|
+
Enabled: false
|
75
|
+
|
76
|
+
Style/CollectionMethods:
|
77
|
+
PreferredMethods:
|
78
|
+
detect: "detect"
|
79
|
+
find: "detect"
|
80
|
+
inject: "inject"
|
81
|
+
reduce: "inject"
|
82
|
+
|
83
|
+
Style/Documentation:
|
84
|
+
Enabled: false
|
85
|
+
|
86
|
+
Style/DoubleNegation:
|
87
|
+
Enabled: false
|
88
|
+
|
89
|
+
Style/EmptyCaseCondition:
|
90
|
+
Enabled: false
|
91
|
+
|
92
|
+
Style/EmptyElse:
|
93
|
+
EnforcedStyle: empty
|
94
|
+
|
95
|
+
Style/EmptyMethod:
|
96
|
+
EnforcedStyle: expanded
|
97
|
+
|
98
|
+
Style/FormatString:
|
99
|
+
EnforcedStyle: percent
|
100
|
+
|
101
|
+
# Do not use frozen_string_literal comment.
|
102
|
+
Style/FrozenStringLiteralComment:
|
103
|
+
Enabled: false
|
104
|
+
|
105
|
+
Style/HashSyntax:
|
106
|
+
Exclude:
|
107
|
+
- "Rakefile"
|
108
|
+
|
109
|
+
Style/MultilineBlockChain:
|
110
|
+
Enabled: false
|
111
|
+
|
112
|
+
Style/MixinUsage:
|
113
|
+
Exclude:
|
114
|
+
- "bin/setup"
|
115
|
+
|
116
|
+
# Use _ when 7 digits or more.
|
117
|
+
Style/NumericLiterals:
|
118
|
+
MinDigits: 7
|
119
|
+
Strict: true
|
120
|
+
|
121
|
+
Style/NumericPredicate:
|
122
|
+
Enabled: false
|
123
|
+
|
124
|
+
Style/OrAssignment:
|
125
|
+
Enabled: false
|
126
|
+
|
127
|
+
Style/PercentLiteralDelimiters:
|
128
|
+
Enabled: false
|
129
|
+
|
130
|
+
# `has_xxx?` is more readable.
|
131
|
+
Style/PreferredHashMethods:
|
132
|
+
EnforcedStyle: verbose
|
133
|
+
|
134
|
+
# Do not use unnecessary returns. (Allow to return multiple values.)
|
135
|
+
Style/RedundantReturn:
|
136
|
+
AllowMultipleReturnValues: true
|
137
|
+
|
138
|
+
# Do not specify error class when rescuing StandardError.
|
139
|
+
Style/RescueStandardError:
|
140
|
+
EnforcedStyle: implicit
|
141
|
+
|
142
|
+
# String literals use double quotes.
|
143
|
+
Style/StringLiterals:
|
144
|
+
EnforcedStyle: double_quotes
|
145
|
+
|
146
|
+
# String literal inside the string interpolation use double quotes too.
|
147
|
+
Style/StringLiteralsInInterpolation:
|
148
|
+
EnforcedStyle: double_quotes
|
149
|
+
|
150
|
+
# Percent(`%i(a b)`) and brackets(`[:a, :b]`) are acceptable.
|
151
|
+
Style/SymbolArray:
|
152
|
+
Enabled: false
|
153
|
+
|
154
|
+
# Put a trailing comma in argument list.
|
155
|
+
Style/TrailingCommaInArguments:
|
156
|
+
EnforcedStyleForMultiline: comma
|
157
|
+
|
158
|
+
# Put a trailing comma in Array literal.
|
159
|
+
Style/TrailingCommaInArrayLiteral:
|
160
|
+
EnforcedStyleForMultiline: comma
|
161
|
+
|
162
|
+
# Put a trailing comma in Hash literal.
|
163
|
+
Style/TrailingCommaInHashLiteral:
|
164
|
+
EnforcedStyleForMultiline: comma
|
165
|
+
|
166
|
+
# Percent(`%w(a b)`) and brackets(`["a", "b"]`) are acceptable.
|
167
|
+
Style/WordArray:
|
168
|
+
Enabled: false
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.7.2
|
data/Gemfile
CHANGED
@@ -1,9 +1,6 @@
|
|
1
|
-
source
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
2
4
|
|
3
5
|
# Specify your gem's dependencies in passwd.gemspec
|
4
6
|
gemspec
|
5
|
-
|
6
|
-
group :test do
|
7
|
-
gem 'coveralls', require: false
|
8
|
-
gem 'simplecov', require: false
|
9
|
-
end
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2013-2018 Ken Iiboshi
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -1,207 +1,158 @@
|
|
1
1
|
# Passwd
|
2
2
|
|
3
|
-
[](https://travis-ci.org/i2bskn/passwd)
|
5
|
-
[](https://coveralls.io/r/i2bskn/passwd?branch=master)
|
6
|
-
[](https://codeclimate.com/github/i2bskn/passwd)
|
3
|
+
[](http://badge.fury.io/rb/passwd)
|
7
4
|
|
8
|
-
|
5
|
+
Passwd is provide hashed password creation and authentication.
|
9
6
|
|
10
7
|
## Installation
|
11
8
|
|
12
9
|
Add this line to your application's Gemfile:
|
13
10
|
|
14
11
|
```ruby
|
15
|
-
gem
|
12
|
+
gem "passwd"
|
16
13
|
```
|
17
14
|
|
18
15
|
And then execute:
|
19
16
|
|
20
|
-
$ bundle
|
21
|
-
|
22
|
-
Or install it yourself as:
|
23
|
-
|
24
|
-
$ gem install passwd
|
25
|
-
|
26
|
-
## Usage
|
27
|
-
|
28
|
-
```ruby
|
29
|
-
require 'passwd'
|
30
17
|
```
|
31
|
-
|
32
|
-
### Create random password
|
33
|
-
|
34
|
-
```ruby
|
35
|
-
password = Passwd.create
|
18
|
+
$ bundle install
|
36
19
|
```
|
37
20
|
|
38
|
-
|
21
|
+
Create config file(Only Rails) with:
|
39
22
|
|
40
|
-
Hashing with SHA1.
|
41
|
-
|
42
|
-
```ruby
|
43
|
-
password_hash = Passwd.hashing(password)
|
44
23
|
```
|
45
|
-
|
46
|
-
### Password settings
|
47
|
-
|
48
|
-
Default config is stored in the class instance variable.
|
49
|
-
Changing the default configs are as follows:
|
50
|
-
|
51
|
-
```ruby
|
52
|
-
Passwd.config # => Get config object.
|
53
|
-
Passwd.config(length: 10) # => Change to the default length.
|
54
|
-
|
55
|
-
Passwd.configure do |c|
|
56
|
-
c.length = 10
|
57
|
-
end
|
24
|
+
$ bundle exec rails generate passwd:install
|
58
25
|
```
|
59
26
|
|
60
|
-
|
27
|
+
The following file will be created.
|
28
|
+
See [config](https://github.com/i2bskn/passwd/blob/master/lib/generators/passwd/install/templates/passwd.rb) if not Rails.
|
61
29
|
|
62
|
-
|
63
|
-
* :lower => Skip lower case if set false. default is true.
|
64
|
-
* :upper => Skip upper case if set false. default is true.
|
65
|
-
* :number => Skip numbers if set false. default is true.
|
66
|
-
* :letters_lower => Define an array of lower case. default is ("a".."z").to_a
|
67
|
-
* :letters_upper => Define an array of upper case. default is ("A".."Z").to_a
|
68
|
-
* :letters_number => Define an array of numbers. default is ("0".."9").to_a
|
30
|
+
- `config/initializers/passwd.rb`
|
69
31
|
|
70
|
-
|
32
|
+
## Usage
|
71
33
|
|
72
|
-
|
34
|
+
### Ruby
|
73
35
|
|
74
36
|
```ruby
|
75
|
-
Passwd.
|
37
|
+
passwd = Passwd.current
|
38
|
+
passwd.random(10) # Create random password of 10 characters.
|
39
|
+
password = passwd.password_hashing("secret") # Create hashed password from plain text.
|
40
|
+
password == "secret" # => true
|
41
|
+
load_password = passwd.load_password("hashed_password") # Load hashed password.
|
42
|
+
load_password == "secret"
|
76
43
|
```
|
77
44
|
|
78
|
-
###
|
45
|
+
### ActiveRecord with Rails
|
46
|
+
|
47
|
+
Add authentication to your `User` model.
|
48
|
+
Model name is `User` by default, but can be changed in configuration file.
|
79
49
|
|
80
50
|
```ruby
|
81
|
-
|
82
|
-
|
51
|
+
class User < ActiveRecord::Base
|
52
|
+
with_authenticate
|
83
53
|
end
|
84
54
|
```
|
85
55
|
|
86
|
-
Options
|
56
|
+
#### Options
|
87
57
|
|
88
|
-
|
89
|
-
|
90
|
-
* :require_upper => Require upper case if set true. default is false.
|
91
|
-
* :require_number => Require number if set true. default is true.
|
58
|
+
User model The following column are required.
|
59
|
+
Column name can be changed with the specified options.
|
92
60
|
|
93
|
-
|
61
|
+
- `:id => :email` Unique value to be used for authentication.
|
62
|
+
- `:password => :password` Column of String to save the hashed password.
|
94
63
|
|
95
|
-
|
96
|
-
Default salt is "#{Time.now.to_s}".
|
64
|
+
Use the `name` column as id.
|
97
65
|
|
98
66
|
```ruby
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
password.salt_hash # return hash salt.
|
103
|
-
password.hash # return hash password.
|
67
|
+
class User < ActiveRecord::Base
|
68
|
+
with_authenticate id: :name
|
69
|
+
end
|
104
70
|
```
|
105
71
|
|
106
|
-
|
72
|
+
#### Authenticate
|
107
73
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
74
|
+
`authenticate` method is available in both instance and class.
|
75
|
+
Returns user object if the authentication successful.
|
76
|
+
Returns nil if authentication fails or doesn't exists user.
|
77
|
+
Instance method is not required `id`.
|
112
78
|
|
113
79
|
```ruby
|
114
|
-
|
115
|
-
|
116
|
-
Passwd.auth("invalid!!", password.salt_hash, password.hash) # => false
|
117
|
-
|
118
|
-
password == password.text # => true
|
119
|
-
password == "invalid!!" # => false
|
80
|
+
user = User.authenticate(params[:email], params[:password]) # Returns user object or nil.
|
81
|
+
user.authenticate(params[:password]) # Returns true if authentication succeeded.
|
120
82
|
```
|
121
83
|
|
122
|
-
|
123
|
-
|
124
|
-
### User model
|
125
|
-
|
126
|
-
Include `Passwd::ActiveRecord` module and define id/salt/password column from `define_column` method.
|
127
|
-
`id` column is required uniqueness.
|
84
|
+
`set_password` method will be set random password.
|
85
|
+
To specify password as an argument if you want to specify a password.
|
128
86
|
|
129
87
|
```ruby
|
130
|
-
|
131
|
-
|
132
|
-
# if not specified arguments for define_column => {id: :email, salt: :salt, password: :password}
|
133
|
-
define_column id: :id_colname, salt: :salt_colname, password: :password_colname
|
88
|
+
current_user.set_password("secret") # Set random password if not specified a argument.
|
89
|
+
current_user.save
|
134
90
|
|
135
|
-
|
136
|
-
|
91
|
+
new_user = User.new
|
92
|
+
random_plain_password = new_user.set_password
|
93
|
+
UserMailer.register(new_user, random_plain_password).deliver!
|
137
94
|
```
|
138
95
|
|
139
|
-
|
96
|
+
### ActionController
|
140
97
|
|
141
|
-
|
98
|
+
Already several methods is available in your controller.
|
142
99
|
|
143
|
-
|
144
|
-
|
145
|
-
|
100
|
+
If you want to authenticate the application.
|
101
|
+
Unauthorized access is thrown exception.
|
102
|
+
Can be specified to redirect in configuration file.
|
146
103
|
|
147
104
|
```ruby
|
148
|
-
|
149
|
-
|
150
|
-
if user
|
151
|
-
puts "Hello #{user.name}!"
|
152
|
-
else
|
153
|
-
puts "Authentication failed"
|
105
|
+
class ApplicationController < ActionController::Base
|
106
|
+
before_action :require_signin
|
154
107
|
end
|
155
108
|
```
|
156
109
|
|
157
|
-
|
110
|
+
If you want to implement the session management.
|
158
111
|
|
159
112
|
```ruby
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
113
|
+
class SessionsController < ApplicationController
|
114
|
+
# If you has been enabled `require_signin` in ApplicationController
|
115
|
+
skip_before_action :require_signin
|
116
|
+
|
117
|
+
# GET /signin
|
118
|
+
def new; end
|
119
|
+
|
120
|
+
# POST /signin
|
121
|
+
def create
|
122
|
+
# Returns nil or user
|
123
|
+
@user = User.authenticate(params[:email], params[:password])
|
124
|
+
|
125
|
+
if @user
|
126
|
+
# Save user_id to session
|
127
|
+
signin(@user)
|
128
|
+
redirect_to_referer_or some_path, notice: "Signin was successful. Hello #{current_user.name}"
|
129
|
+
else # Authentication fails
|
130
|
+
render action: :new
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
# DELETE /signout
|
135
|
+
def destroy
|
136
|
+
# Clear session (Only user_id)
|
137
|
+
signout
|
138
|
+
redirect_to some_path
|
139
|
+
end
|
165
140
|
end
|
166
141
|
```
|
167
142
|
|
168
|
-
|
169
|
-
|
170
|
-
`set_password` method will be set random password.
|
171
|
-
Return value is plain text password.
|
172
|
-
To specify the password as an argument if you want to specify a password.
|
173
|
-
`salt` also set if salt is nil.
|
143
|
+
`current_user` and `signin?` method available in controllers and views.
|
174
144
|
|
175
145
|
```ruby
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
if user.save
|
180
|
-
NoticeMailer.change_mail(user, password_text).deliver
|
146
|
+
def greet
|
147
|
+
name = signin? ? current_user.name : "Guest"
|
148
|
+
render text: "Hello #{name}!!"
|
181
149
|
end
|
182
150
|
```
|
183
|
-
`update_password` method will be set new password if the authentication successful.
|
184
|
-
Return the nil if authentication fails.
|
185
|
-
But `update_password` method doesn't call `save` method.
|
186
151
|
|
187
|
-
|
188
|
-
@user = User.find(params[:id])
|
152
|
+
## Contributing
|
189
153
|
|
190
|
-
|
191
|
-
if @user.update_password(old_pass, new_pass) && @user.save # => return new password(text) or false
|
192
|
-
NoticeMailer.change_mail(user, password_text).deliver
|
193
|
-
else
|
194
|
-
puts "Authentication failed!"
|
195
|
-
end
|
196
|
-
else
|
197
|
-
puts "Password don't match!"
|
198
|
-
end
|
199
|
-
```
|
154
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/i2bskn/passwd.
|
200
155
|
|
201
|
-
##
|
156
|
+
## License
|
202
157
|
|
203
|
-
|
204
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
205
|
-
3. Commit your changes (`git commit -am 'Added some feature'`)
|
206
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
207
|
-
5. Create new Pull Request
|
158
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|