minnie 0.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.
- data/.gitignore +7 -0
- data/Gemfile +4 -0
- data/README.md +68 -0
- data/Rakefile +1 -0
- data/lib/generators/templates/sessions_controller.rb +21 -0
- data/lib/minnie.rb +5 -0
- data/lib/minnie/authentication.rb +70 -0
- data/lib/minnie/version.rb +3 -0
- data/minnie.gemspec +22 -0
- metadata +71 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
#Minnie
|
2
|
+
|
3
|
+
###Install
|
4
|
+
|
5
|
+
Add minnie and bcrypt-ruby to your Gemfile
|
6
|
+
|
7
|
+
gem 'minnie'
|
8
|
+
gem 'bcrypt-ruby'
|
9
|
+
|
10
|
+
Include minnie's authentication in application_controller.rb and set it to require
|
11
|
+
authentication for every controller
|
12
|
+
|
13
|
+
class ApplicationController
|
14
|
+
include Minnie::Authentication
|
15
|
+
|
16
|
+
before_filter :authenticate_user!
|
17
|
+
|
18
|
+
...
|
19
|
+
|
20
|
+
Create a sessions_controller.rb
|
21
|
+
|
22
|
+
class SessionsController < ApplicationController
|
23
|
+
skip_before_filter :authenticate_user!, :except => [:destroy]
|
24
|
+
|
25
|
+
def new
|
26
|
+
@user = User.new
|
27
|
+
end
|
28
|
+
|
29
|
+
def create
|
30
|
+
if @user = authenticate(params[:user][:email], params[:user][:password])
|
31
|
+
sign_in_and_redirect(@user)
|
32
|
+
else
|
33
|
+
flash.now[:error] = I18n.t(:invalid_login, :scope => 'app.sessions')
|
34
|
+
render "new"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def destroy
|
39
|
+
sign_out_and_redirect
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
And a login form at app/views/sessions/new.html.erb (this one uses simple_form)
|
44
|
+
|
45
|
+
<h2>Sign in</h2>
|
46
|
+
|
47
|
+
<%= simple_form_for @user, :url => sessions_path do |f| %>
|
48
|
+
<%= f.error_notification %>
|
49
|
+
|
50
|
+
<div class="inputs">
|
51
|
+
<%= f.input :email %>
|
52
|
+
<%= f.input :password %>
|
53
|
+
</div>
|
54
|
+
<div class="actions">
|
55
|
+
<%= f.button :submit, 'Sign In' %>
|
56
|
+
</div>
|
57
|
+
<% end %>
|
58
|
+
|
59
|
+
Generate a user.rb that is set up for has_secure_password
|
60
|
+
|
61
|
+
bundle exec rails g model user email:string password_digest:string
|
62
|
+
|
63
|
+
And then update app/models/user.rb to include has_secure_password
|
64
|
+
|
65
|
+
class User < ActiveRecord::Base
|
66
|
+
has_secure_password
|
67
|
+
end
|
68
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class SessionsController < ApplicationController
|
2
|
+
skip_before_filter :authenticate_user!, :except => [:destroy]
|
3
|
+
|
4
|
+
def new
|
5
|
+
@user = User.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def create
|
9
|
+
if @user = authenticate(params[:user][:email], params[:user][:password])
|
10
|
+
sign_in_and_redirect(@user)
|
11
|
+
else
|
12
|
+
@user = User.new
|
13
|
+
flash.now[:error] = I18n.t(:invalid_login, :scope => 'app.sessions')
|
14
|
+
render "new"
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def destroy
|
19
|
+
sign_out_and_redirect
|
20
|
+
end
|
21
|
+
end
|
data/lib/minnie.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
module Minnie
|
2
|
+
module Authentication
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
helper_method :current_user
|
7
|
+
|
8
|
+
hide_action :authenticate_user!, :sign_in_and_redirect,
|
9
|
+
:sign_out_and_redirect, :current_user,
|
10
|
+
:authenticate
|
11
|
+
end
|
12
|
+
|
13
|
+
def authenticate_user!
|
14
|
+
redirect unless session[:user_id] && User.first(:conditions => {:id => session[:user_id]})
|
15
|
+
end
|
16
|
+
|
17
|
+
def sign_in_and_redirect(user, options = {})
|
18
|
+
session[:user_id] = user.id
|
19
|
+
options.reverse_merge!({:notice => I18n.t(:signed_in, :scope => 'app.sessions')})
|
20
|
+
redirect_to after_sign_in_path, options
|
21
|
+
end
|
22
|
+
|
23
|
+
def sign_out_and_redirect(options = {})
|
24
|
+
reset_session
|
25
|
+
options.reverse_merge!({:notice => I18n.t(:signed_out, :scope => 'app.sessions')})
|
26
|
+
redirect_to after_sign_out_path, options
|
27
|
+
end
|
28
|
+
|
29
|
+
def current_user
|
30
|
+
@current_user ||= User.first(:conditions => {:id => session[:user_id]}) if session[:user_id]
|
31
|
+
end
|
32
|
+
|
33
|
+
def authenticate(email, password)
|
34
|
+
user = User.find_by_email(email)
|
35
|
+
return user && user.authenticate(password)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def redirect
|
41
|
+
store_location!
|
42
|
+
store_params!
|
43
|
+
redirect_to new_session_path
|
44
|
+
end
|
45
|
+
|
46
|
+
def store_location!
|
47
|
+
session[:return_to] = request.fullpath if request.get?
|
48
|
+
end
|
49
|
+
|
50
|
+
def stored_location
|
51
|
+
session.delete("return_to")
|
52
|
+
end
|
53
|
+
|
54
|
+
def store_params!
|
55
|
+
session[:params] = params
|
56
|
+
end
|
57
|
+
|
58
|
+
def stored_params
|
59
|
+
session[:params] || {}
|
60
|
+
end
|
61
|
+
|
62
|
+
def after_sign_in_path
|
63
|
+
stored_location || root_path
|
64
|
+
end
|
65
|
+
|
66
|
+
def after_sign_out_path
|
67
|
+
root_path
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/minnie.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "minnie/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "minnie"
|
7
|
+
s.version = Minnie::VERSION
|
8
|
+
s.authors = ["Michael McClenaghan"]
|
9
|
+
s.email = ["mike@sideline.ca"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Simplest authentication possible}
|
12
|
+
s.description = %q{The simplest that authentication can get while still being useful}
|
13
|
+
|
14
|
+
s.rubyforge_project = "minnie"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_runtime_dependency('rails', '>= 3.0')
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: minnie
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Michael McClenaghan
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-02-21 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: &70109536609320 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '3.0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70109536609320
|
25
|
+
description: The simplest that authentication can get while still being useful
|
26
|
+
email:
|
27
|
+
- mike@sideline.ca
|
28
|
+
executables: []
|
29
|
+
extensions: []
|
30
|
+
extra_rdoc_files: []
|
31
|
+
files:
|
32
|
+
- .gitignore
|
33
|
+
- Gemfile
|
34
|
+
- README.md
|
35
|
+
- Rakefile
|
36
|
+
- lib/generators/templates/sessions_controller.rb
|
37
|
+
- lib/minnie.rb
|
38
|
+
- lib/minnie/authentication.rb
|
39
|
+
- lib/minnie/version.rb
|
40
|
+
- minnie.gemspec
|
41
|
+
homepage: ''
|
42
|
+
licenses: []
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
hash: 3873794554763273120
|
56
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
hash: 3873794554763273120
|
65
|
+
requirements: []
|
66
|
+
rubyforge_project: minnie
|
67
|
+
rubygems_version: 1.8.7
|
68
|
+
signing_key:
|
69
|
+
specification_version: 3
|
70
|
+
summary: Simplest authentication possible
|
71
|
+
test_files: []
|