jt-rails-generator-user 1.0.0

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: 0f5b69d33209d4864f7bd83f4fca4af58259746f
4
+ data.tar.gz: fa045b65a2bd51a7599a36c56ad7c904b318ad97
5
+ SHA512:
6
+ metadata.gz: a1049df6a02d21388947ccd4bc19f7bf1cad9ec9c2d0b792920b65eb10d933514ccbb0faac0c18e875e0a5eac364cb550df403bc56448fd1840bfdcd628df881
7
+ data.tar.gz: 48e1a357772036978a584b29b91db88a717ac641188bd7ead43a4231c47ce71d52e893517c5d46bd74ad0f1adaa8c0db37d03f3293bc095d879cb0bbcbc7e3c8
@@ -0,0 +1,2 @@
1
+ *.gem
2
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2015 Jonathan Tribouharet
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to deal
5
+ in the Software without restriction, including without limitation the rights
6
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7
+ copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
+ THE SOFTWARE.
@@ -0,0 +1,44 @@
1
+ # JTRailsGeneratorUser
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/jt-rails-generator-user.svg)](http://badge.fury.io/rb/jt-rails-generator-user)
4
+
5
+ JTRailsGeneratorUser is a generator for user authentication. You have the login and sign up page, password forgot feature.
6
+
7
+ ## Installation
8
+
9
+ JTRailsGeneratorUser is distributed as a gem, which is how it should be used in your app.
10
+
11
+ Include the gem in your Gemfile:
12
+
13
+ gem 'jt-rails-generator-user', '~> 1.0'
14
+
15
+ ## Usage
16
+
17
+ You just have to use the generator with:
18
+
19
+ rails g jt:user
20
+
21
+ Include `CurrentUser` in your `ApplicationController`:
22
+
23
+ ```ruby
24
+ class ApplicationController < ActionController::Base
25
+ include CurrentUser
26
+ ...
27
+ end
28
+ ```
29
+
30
+ ## What's does it generate?
31
+
32
+ - `User` model with only email, password and password_token (for password forgot feature)
33
+ - `SessionController` for the login
34
+ - `UsersController` for the sign up and password forgot feature
35
+ - `UserMailer` for sending password reset instructions
36
+ - `CurrentUser` module which manage `current_user` variable and `require_user` filter
37
+
38
+ ## Author
39
+
40
+ - [Jonathan Tribouharet](https://github.com/jonathantribouharet) ([@johntribouharet](https://twitter.com/johntribouharet))
41
+
42
+ ## License
43
+
44
+ JTRailsGeneratorUser is released under the MIT license. See the LICENSE file for more info.
@@ -0,0 +1,13 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'jt-rails-generator-user'
3
+ s.summary = "Generate a scaffold for user authentication in Ruby On Rails"
4
+ s.description = "JTRailsGeneratorUser is a generator for user authentication. You have the login and sign up page, password forgot feature."
5
+ s.homepage = 'https://github.com/jonathantribouharet/jt-rails-generator-user'
6
+ s.version = '1.0.0'
7
+ s.files = `git ls-files`.split("\n")
8
+ s.require_paths = ['lib']
9
+ s.authors = ['Jonathan TRIBOUHARET']
10
+ s.email = 'jonathan.tribouharet@gmail.com'
11
+ s.license = 'MIT'
12
+ s.platform = Gem::Platform::RUBY
13
+ end
@@ -0,0 +1,3 @@
1
+ Create a scaffold for user authentication to your Rails App.
2
+
3
+ rails g jt:user
@@ -0,0 +1,29 @@
1
+ module CurrentUser
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ helper_method :current_user
6
+ end
7
+
8
+ def set_current_user(user)
9
+ session[:user_id] = user.id
10
+ end
11
+
12
+ def current_user
13
+ @current_user ||= User.find_by_id(session[:user_id]) if session[:user_id]
14
+ @current_user
15
+ end
16
+
17
+ def require_user
18
+ if !current_user
19
+ redirect_to login_url
20
+ end
21
+ end
22
+
23
+ def require_no_user
24
+ if current_user
25
+ redirect_to root_url
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,24 @@
1
+ class SessionsController < ApplicationController
2
+
3
+ before_action :require_no_user, except: [:destroy]
4
+
5
+ def new
6
+ end
7
+
8
+ def create
9
+ user = User.authenticate(params[:email], params[:password])
10
+
11
+ if user
12
+ set_current_user(user)
13
+ redirect_to root_url
14
+ else
15
+ render :new
16
+ end
17
+ end
18
+
19
+ def destroy
20
+ reset_session
21
+ redirect_to root_url
22
+ end
23
+
24
+ end
@@ -0,0 +1,49 @@
1
+ class UsersController < ApplicationController
2
+
3
+ before_action :require_no_user
4
+
5
+ def new
6
+ @user = User.new
7
+ end
8
+
9
+ def create
10
+ @user = User.new(user_params)
11
+ if @user.save
12
+ set_current_user(@user)
13
+ redirect_to root_url
14
+ else
15
+ render :new
16
+ end
17
+ end
18
+
19
+ def password_forgot
20
+ if request.post?
21
+ @user = User.search_by_email_for_authentication(params[:email]).first
22
+ if @user
23
+ @user.generate_new_password_token!
24
+ UserMailer.reset_password(@user.id).deliver_later
25
+
26
+ redirect_to root_url
27
+ end
28
+ end
29
+ end
30
+
31
+ def reset_password
32
+ user = User.where(password_token: params[:token]).first
33
+ if user
34
+ set_current_user(user)
35
+ user.clear_password_token!
36
+
37
+ redirect_to root_url
38
+ else
39
+ redirect_to root_url
40
+ end
41
+ end
42
+
43
+ private
44
+
45
+ def user_params
46
+ params.require(:user).permit(:email, :password)
47
+ end
48
+
49
+ end
@@ -0,0 +1,8 @@
1
+ class UserMailer < ApplicationMailer
2
+
3
+ def reset_password(user_id)
4
+ @user = User.find(user_id)
5
+ mail(to: @user.email, subject: 'Reset password')
6
+ end
7
+
8
+ end
@@ -0,0 +1,41 @@
1
+ module UserAuthentication
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+
6
+ has_secure_password(validations: false)
7
+
8
+ validates :email, presence: true, email_format: true, uniqueness: { case_sensitive: false}
9
+ validates :password_token, uniqueness: true, if: Proc.new {|u| !u.password_token.blank? }
10
+
11
+ before_save :downcase_email
12
+
13
+ scope :search_by_email_for_authentication, ->(email = nil) { where(email: email.to_s.downcase).where('password_digest IS NOT NULL') }
14
+
15
+ end
16
+
17
+ module ClassMethods
18
+
19
+ def authenticate(email, password)
20
+ self.search_by_email_for_authentication(email).first.try(:authenticate, password)
21
+ end
22
+
23
+ end
24
+
25
+ def downcase_email
26
+ self.email.downcase! if self.email
27
+ end
28
+
29
+ def generate_new_password_token!
30
+ self.password_token = loop do
31
+ random_token = SecureRandom.urlsafe_base64(128, false)
32
+ break random_token unless self.class.exists?(password_token: random_token)
33
+ end
34
+ self.save!
35
+ end
36
+
37
+ def clear_password_token!
38
+ self.update_column(:password_token, nil)
39
+ end
40
+
41
+ end
@@ -0,0 +1,5 @@
1
+ class User < ActiveRecord::Base
2
+
3
+ include UserAuthentication
4
+
5
+ end
@@ -0,0 +1,8 @@
1
+ <%= form_tag login_path do %>
2
+
3
+ <%= text_field_tag :email, params[:email] %>
4
+ <%= password_field_tag :password %>
5
+
6
+ <%= submit_tag 'Login' %>
7
+
8
+ <% end %>
@@ -0,0 +1 @@
1
+ <%= link_to reset_password_users_url(@user.password_token), reset_password_users_url(@user.password_token) %>
@@ -0,0 +1,8 @@
1
+ <%= form_for @user do |f| %>
2
+
3
+ <%= f.text_field :email %>
4
+ <%= f.password_field :password %>
5
+
6
+ <%= f.submit %>
7
+
8
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <%= form_tag password_forgot_users_path do %>
2
+
3
+ <%= text_field_tag :email %>
4
+
5
+ <%= submit_tag 'Reset my password' %>
6
+
7
+ <% end %>
@@ -0,0 +1,28 @@
1
+ module Jt
2
+ class UserGenerator < Rails::Generators::Base
3
+
4
+ source_root File.expand_path("../templates", __FILE__)
5
+
6
+ def create_initializer_file
7
+ generate "migration", "CreateUsers", "email:string password_digest:string password_token:string"
8
+
9
+ directory 'controllers', 'app/controllers'
10
+ directory 'mailers', 'app/mailers'
11
+ directory 'models', 'app/models'
12
+ directory 'views', 'app/views'
13
+
14
+ route "resources :users, only: [:new, :create] do
15
+ collection do
16
+ get 'password_forgot' => 'users#password_forgot', as: :password_forgot
17
+ post 'password_forgot' => 'users#password_forgot'
18
+
19
+ get 'reset_password/:token' => 'users#reset_password', as: :reset_password
20
+ end
21
+ end"
22
+
23
+ route "get 'logout' => 'sessions#destroy', as: :logout"
24
+ route "post 'login' => 'sessions#create'"
25
+ route "get 'login' => 'sessions#new', as: :login"
26
+ end
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jt-rails-generator-user
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Jonathan TRIBOUHARET
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-02 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: JTRailsGeneratorUser is a generator for user authentication. You have
14
+ the login and sign up page, password forgot feature.
15
+ email: jonathan.tribouharet@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - .gitignore
21
+ - Gemfile
22
+ - LICENSE
23
+ - README.md
24
+ - jt-rails-generator-user.gemspec
25
+ - lib/generators/jt/user/USAGE
26
+ - lib/generators/jt/user/templates/controllers/concerns/current_user.rb
27
+ - lib/generators/jt/user/templates/controllers/sessions_controller.rb
28
+ - lib/generators/jt/user/templates/controllers/users_controller.rb
29
+ - lib/generators/jt/user/templates/mailers/user_mailer.rb
30
+ - lib/generators/jt/user/templates/models/concerns/user_authentication.rb
31
+ - lib/generators/jt/user/templates/models/user.rb
32
+ - lib/generators/jt/user/templates/views/sessions/new.html.erb
33
+ - lib/generators/jt/user/templates/views/user_mailer/reset_password.html.erb
34
+ - lib/generators/jt/user/templates/views/users/new.html.erb
35
+ - lib/generators/jt/user/templates/views/users/password_forgot.html.erb
36
+ - lib/generators/jt/user/user_generator.rb
37
+ homepage: https://github.com/jonathantribouharet/jt-rails-generator-user
38
+ licenses:
39
+ - MIT
40
+ metadata: {}
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project:
57
+ rubygems_version: 2.0.14
58
+ signing_key:
59
+ specification_version: 4
60
+ summary: Generate a scaffold for user authentication in Ruby On Rails
61
+ test_files: []